On logic in a Rails app - <AUTHOR> http://alisnic.github.com/posts/rails-logic/ <comment><USER2> The funny thing about the argument that people have about where logic should go in an application (models, controllers, or separate objects) is that everyone assumes that there is one right answer for an application for all time.

We should probably move toward guidance like: "this is when you move your logic here" and "when this happens, it's time to move it out of the controller."

For what it's worth, I think it is okay to start doing things the naive way in Rails as long as you know when to refactor toward a different scheme. The bad thing is that it is usually earlier than you think.

<comment><USER3> Do people have these sorts of arguments in languages like clojure or haskell?

<comment><USER2> Domain matters more than language for this sort of thing. People tend to have these arguments around business applications.

</comment></comment></comment><comment><USER4> I think many people react negatively to this article because they gloss over the idea that this is a refactoring.

When coding you always make the choice between abstraction and readability. If you look at the patterns from GoF, the downside of almost every pattern is that it reduces readability for the simple cases.

Thus, when you write your controllers and your models in my opinion you should start out doing it 'the rails way' which is having your business logic in your models, and the controlling logic in your controllers.

Then when your app is starting to feel clunky, your controllers are gaining weight and your models have too many responsibilities, that is the point where you start refactoring.

And that is also where you decide wether the logic belongs into a concern, or a policy, or whatever fancy pattern is hip right now and fits there. (But you really should make an effort to make clear where logic ends up for someone new to your code, so be consistent!)

I think rapid development is one of the key features that made Rails big, don't let these concerns that big apps have drag you down in the beginning.

<comment><USER5> People will spew all these separate classes from the very beginning in the name of "test-ability".

<comment><AUTHOR> I don't understand what is the problem of having a lot of small classes? They are there when you need them, and they get out of the way you don't, and I think that's the most important thing.

<comment><USER6> Indirection. Every time you add a new class to do something and call it from somewhere else you've added an extra level of indirection. This can be good when dealing with complex logic but for many cases it just hinders code readability.

<comment><AUTHOR> I am not sure I understand your point, can you elaborate?

<comment><USER7> When the actual logic resides deep in a call stack, it's more difficult to debug code, much less bring on new developers. Each additional abstraction layer is, unsurprisingly, another layer that you're going to have to trace through to get at the root of the issue.

Similarly, when your logic doesn't reside at the root level, it's easy to accidentally bypass. Perhaps this is intentional, but I'd argue that intentionally bypassing certain logic under certain conditions indicates your logic is poorly factored. My most common example to this is an admin panel: admins can, as an example, change any user's name, not just their own. However, this only holds true when in the admin panel. So in your user controller, you have some sort of permission check ensuring that the user being operated on is the one authenticated[1], but intentionally don't place that check in your admin controller. One day in the name of a better UX you add an AJAX component to this, and forget to copy across that check into the ajax endpoint. Suddenly I can change anyone's username, despite not being an admin.

To solve this, we've created a couple of libraries: PermissionCheck and AuthContext; the former (typically) depends on the latter. AuthContext answers the questions of who are you (authentication) and where are you (context), and the permission check wraps up the authorization component: in the (web frontend | api | admin panel | cronjob | upgrade script) does the currently authenticated user have permission to do X on object Y? By putting these checks in the models, it's easy to ensure they're always enforced (a user's updateName method may call checkUpdateName()->enforce() ); if you want to side-step (or ramp up) authorization under a certain context, you edit the model's permission check for that action, rather than one or more controllers.

Could you put that into a different helper library? Probably, if you were so inclined. However, that leaves you with at least two files to check when you want to examine behavior, and an inability to use any protected or private methods from these permission checks.

Having an object that does a lot of stuff is not necessarily the much-feared "God object", although it certainly can become that. I've learned to become more fearful of the "God methods" instead; having 300 10-line methods doesn't concern me nearly as much as 10 300-line methods. Breaking code apart simply because you want a smaller file means you have a crappy text editor. Break code apart when it's logically doing more than it should be doing, or is poorly encapsulated.

This is, to a limited degree, an issue I have with mocking in unit tests: while great in theory (test components individually and trust that your interfaces/contracts/whatever ensure that A and B independently working mean that in production they will work together), in practice the two components do have a dependency on each other, and it's exceedingly difficult to reproduce production issues because of that fake isolation. How many ways have you seen an external API fail? Have you reproduced those failure modes in your mock, and have you written tests against each one of those different modes? Maybe it's the industry I'm in (payments), but in a world made of edge cases, effectively squaring the number of scenarios I have to test is not a pleasant experience.

/edit - forgot my footnote :) [1] In practice, a user controller will hopefully tend to always operate on the currently-authenticated user, rather than passing around a userId by whatever means. However I've seen the latter done, and this exact kind of problem is what ensued.

<comment><AUTHOR> I don't think I agree with the fact that every time you isolate a piece of logic you add a layer. But I don't think I have a solid argument for that yet :)

You do make a good point though that in having many small objects is easy to mess with external dependencies. But in my case, the testing always suggested if I had done something like that, and I improved. If an object becomes hard to test in isolation, then something has been done wrong.

<comment><USER7> Oh, I don't think isolating logic necessarily adds a layer, unless you go overboard with isolating it. I think we're probably caught up on the subtle differences between encapsulation and abstraction.

There seems to be a point where "I can't figure out what's happening here without an IDE" starts to happen, which is a) relatively subjective and b) sometimes a necessary side-effect. I only care when it's hard to test something in isolation when it's actually used in isolation. A private method, for example, exists only to be used by another component; it often makes little sense to test independently, and when it does it's easy to wrap in a public call that asserts that it's being run by a unit test.

But I think a lot of this is theoretical code purity vs prioritizing business goals. All else being equal I'd love a perfectly-factored codebase, but at the end of the day I have to target high-friction, high-confusion areas of the codebase to refactor because those are the ones that get in the way of building stuff for our customers, or cause the most production bugs.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> My experience has been:

\- A file (not a pattern) is the most effective unit of code organization and navigation.

\- Any design, which can be split into multiple files in a logical and consistent manner is maintainable.

A few years back, I might have cared about the issues mentioned in the original post. Looking back, many of them were just personal preferences.

<comment><AUTHOR> > A file (not a pattern) is the most effective unit of code organization and > navigation

This can be misinterpreted in many ways.

</comment></comment><comment><AUTHOR> So far, I got a lot of feedback here and on my blog, which I didn't expect (also the frontpage). There seems to be a general attitude of "why complicating things from day 1?" towards the article I wrote. While I do agree that there is no need to isolate things from the start, I do not see the complications at all.

The cost of creating a file and moving behaviour there is exactly 0, but the benefits are there from day 1.

<comment><USER7> Every extra file I have to look through when programming is an added cost; abstractions add more than just CPU overhead. The highest-priced EC2 instance on Amazon is under $5/hr; you won't find a decent programmer whose time is worth anywhere near that little.

This may be relatively minor on a small project, but adds up quickly. It's extra overhead when onboarding new developers, more time spent debugging (deeper stack traces, etc.) more time simply waiting for grep to run. I'll argue that you actually spend more time refactoring as well, since you're encouraged to spend more time on the upkeep of this over-abstraction for the sake of "clean code" rather than getting real work done.

Probably more important is that you don't know your six-months-from-now problems now, you know them in about 5.9 months. I've wasted a lot of time building the wrong abstraction layers because I made bad assumptions about our future problems. At first, I thought that was a failure of my programming abilities; I've come to realize that was my failure of my psychic abilities.

This isn't an attack on you or your style, merely a few observations about what kind of effect it would have on my own work. If it works well for you, awesome! However, it seems like most of this would only be really effective by v3 or so of a product: v1 answers "is this useful and worth investing more in", v2 covers "ok, let's turn this into a real product", and v3 is that giant scary internal rewrite (that goes great thanks to your now-high unit test coverage) that creates what you would have made from day one if you actually knew what you needed.

</comment></comment><comment><USER9> It all comes down to testing to me. If the dev is writing a test first, questions about where things go are answered pretty quickly. If the tests become painful or awkward, you're probably doing too much in the code.

I think the common Rails response to painful tests is to stop testing. I've heard talk of the "diminishing returns" of testing, or debates of what deserves to be tested. I was once responsible for maintaining many Rails 3 apps that I did not write, and the story was all the same: Either there were no tests, or there were simple tests around simple logic, or there were simple tests covering one or two paths through some _really_ complex logic. Once they felt the pain from their tests, they just stopped writing tests. What else are they going to do... challenge the "Rails Way?"

And this is the community that is supposedly known for their testing. Having used Sinatra or Rails for almost all of my web work for a while, let me tell you: The state of testing in the common Rails app is no different than I've seen anywhere else.

<comment><USER10> This is a very good point. If you consider from the point of view of what should be tested, then I think what the author proposes could be quite natural. We don't want to duplicate and overlap with Rails tests. For me "what to test" is the hardest question.

</comment></comment><comment><USER11> I've been working on the Obvious Architecture, which seeks to decouple your app from both the database and your web framework. Treating Rails or Sinatra or whatever as just a delivery mechanism frees you from a lot of of the potentially bad design decisions that your web framework made about how you should structure your app, the worst offender of this is how rails implies the use of ActiveRecord. You should use Rails for what it's good at - web stuff (routing, asset management, view engine integration).

I've got an example Obvious twitter close/status update app in progress at <https://github.com/RetroMocha/obvious_status>

Obvious is still super new and I'm working on documentation and examples. You can read more about Obvious at <http://obvious.retromocha.com>

<comment><USER12> This sounds rather...performance killing.

Too much abstraction is _way way worse_ than too little, as well.

<comment><USER4> No it isn't.

Too much abstraction can always be refactored down to less abstraction. (Too much abstraction means that there's abstraction that is unnecessary, thus it can be cut away.)

Too little abstraction means your code is too closely coupled. When the code is fresh and small, then ofcourse it's not hard to abstract out a method to DRY something up. But when your code is big and old this will quickly approach infeasability, which is the reason many projects fail.

I would go as far as saying that the science of software engineering exists because your statement is false :P

<comment><USER13> So you're saying that the arrow of refactoring generally points in the direction of less abstraction?

That directly contradicts my experience where most refactoring introduces abstractions _when they are needed_.

<comment><USER14> My interpretation was that he was saying the arrow of refactoring is easier when refactoring in the direction of less abstraction.

I suspect he agrees that generally the arrow points in the direction of more abstraction. This would be the problem he thinks exists.

Not sure where I stand on either side of this; just trying to clear up what I saw as a miscommunication.

<comment><USER4> Yes. Usually when programming one encounters problems that are solved elegantly by introducing abstraction. The parent argues that doing this too eagerly results in a big mess that should be avoided by being cautious with abstraction. I argue the converse, being too cautious with abstraction can result in a big mess and you should be eager to abstract.

Of course there is a golden path in the middle, but it is closer to my side ;)

</comment></comment></comment></comment></comment></comment><comment><USER15> MVC framework is just a delivery mechanism and your business logic should be outside of it. Your business logic should have no idea about web, console, controllers and routes, it should contain information only about your domain objects and rules. You should be able to extract your application logic and make it available on console, web or mobile just by changing the delivery mechanism. This is the original explanation from <http://cleancoders.com> (Bob Martin's website) [http://www.cleancoders.com/codecast/clean-code- episode-7/sho...](http://www.cleancoders.com/codecast/clean-code- episode-7/show)

<comment><USER16> I tend to find this dream rather fevered. A controller knows about the model. It knows about the view. It acts as a conduit between itself, the view and model. In the web, the models are not really event based. Some platforms have tried this, but it tends to not work out well at scale. So ultimately the controller tends to get a lot of business logic embedded because it's difficult to put that logic somewhere else.

The problem with this is that the controllers are very much view-centric. Take .NET for example. There are forms. Logically this is the controller. Events happen, handlers manipulate domain objects and create responses, the result goes to the view. The problem is that even .NET makes a divide between WinForms and WebForms. Entirely different namespaces. Thus your controller is view bound and blocked.

Now you might want to push the logic from the controllers down into the domain objects. This is fine. But, as other talked about with testing, you will have to make sure that you're not doing too much with your domain objects. So you'll probably start to use interfaces and constructors for the domain objects to abstract away view details. You might even use callbacks (another type of interface).

So you're feeling pretty good now. But eventually this type of configuration become heavy. It also might not mesh with your system. I'm not sure about Rails, but Hibernate makes is rather hard to IoC objects it makes. It's really hard to do that by having Spring create your instance variables returned by Hibernate.

In the end, the difficulty of making domain objects smart and loosely coupled, but still coupled to other components while using an ORM makes the whole attempt for naught. Thus you will circle back and put the business logic in the controller or some controller adjacent code that is closely coupled with the view.

<comment><USER17> The whole point of attempting this is to allow these difficulties to force you to decompose the system further than you would using the larger building blocks of MVC.

About six months into working with Rails full time, I began wanting a third place for my logic. Controllers were suboptimal, and models weren't always right. Coming from a native apps, I felt restricted. I later learned that POROs were well and good. But I doubted myself because the Rails way says little.

<comment><USER16> I'm good with POROs (assuming Plain Old Ruby Objects). I'm a huge fan of Domain Driven Design. My issue with the parents is that without going into what many Rubyists would call Java-land, one would find it hard to separate concerns. Also, I don't agree that an MVC can truly be fully decoupled from the V. This is why one seldom has one MVC to rule them all.

</comment></comment></comment></comment><comment><USER18> I think the importance of the Single Responsibility Principle is much overestimated by many people and introducing terms like "single-responsibilty objects" for what are essentially simple procedures is symptomatic of this. There are many properties of classes one can consider beneficial, but they might in fact conflict with each other to some extent, especially when carried out to extremes like in this case, so what you want is to find a good compromise. The "principle" itself is rather a very fuzzy guideline, so I wish it wouldn't be taught to people since it seems to do more harm than good to their understanding good OO design.

On another note, I wonder to what extent Rails usage of the Active Record pattern makes "models" so clumsy in large applications. It works great to a certain point, but maybe in large applications the Data Mapper pattern (not to be confused with the DataMapper library) would help to isolate a large aspect of what currently goes in a model while keeping a nice OO interface:

<http://www.martinfowler.com/eaaCatalog/dataMapper.html>

<comment><AUTHOR> > it seems to do more harm than good to their understanding good OO design.

Can you provide an example?

<comment><USER18> I heard this principle referenced in the context of objects such as presented in the post quite a few times already, for example there was a heated discussion here:

<http://news.ycombinator.com/item?id=4013807>

I explained back then why I consider this not object oriented at all. Here I just wanted to say that if you imagine a spectrum of all the possible breakdowns of a problem into classes, with one huge class at one end and a breakdown so granular you have a separate class for each operation of the system on the other end, there is a point where making the classes have less responsibilities and having more of them is no longer beneficial to the overall design, because you start to violate many other basic principles, for example the "objects" don't really encapsulate any data anymore. I think finding the sweet spot here is the kind of skill that is learnt with experience and not easily passed on with words, hence the wording of the principle is so fuzzy.

</comment></comment></comment><comment><USER19> My problem with fat models is exactly what the author describes, data really needs to be separated from the logic. Since all of my current projects are service oriented, I generally abstract into gems, albeit with some minor overhead. That has proved to be the cleanest approach for me. Just throwing code into /lib never seemed to help the organization/readability problems.

</comment><comment><USER18> This seems to be a new trendy design pattern: wrap a single method with a class and claim you just discovered a pinnacle of object-oriented design since you respect the "Single Responsibility Principle"...

<comment><AUTHOR> > claim you just discovered a pinnacle of object-oriented design since you > respect the "Single Responsibility Principle"...

I never said that, why all the hate? I stated pretty clear that this is my approach on things, and I never pretended it to be the "right" one.

<comment><USER17> Don't sweat it! People tend to adopt different subsets of OOP and then proclaim all other subsets are wrong. Example: large-scale objects that are heavily procedural vs lots of smaller grained objects that adhere to SRP.

I've written a lot of code in both styles, and determined that SRP is a good force on my designs.

</comment></comment></comment><comment><USER20> I think someone needs to plug how awesome the Destroy All Software screencasts are (referenced in the post.) They are well worth their value, and have made me a better developer: <https://www.destroyallsoftware.com/screencasts>

<comment><AUTHOR> Totally agree.

</comment></comment><comment> why-el I can't help but see the irony in the fact that the Rails community is slowly moving back to app directories similar to those we found in Java's Spring and others. I guess people from the Enterprise world had a point.

<comment><AUTHOR> There was a quote in Ruby Rogues podcast which said that "Ruby people use factories a lot, they just don't call them like that"

</comment></comment><comment><USER21> We use a very similar set up in a large Node.js app I'm working on. It works very well for the most part, but we're definitely still figuring out the best way to split things up.

For example, say we want to work with a 'user' model, and we need to do basic CRUD stuff. One argument would say that we should have a module for each action: creating users (registering, hashing password, sending out welcome email, etc.), deleting users (cleaning up their data, removing them from the db), and for authentication, profile updates, and so on. The downside to this is that we end up with a dependence on the underlying data structure across lots of modules. If we want to change the property 'username' to 'login', or something more complex, we have a lot of modules to change. We also need to understand how a user is created before we can understand how they are updated or deleted, which means we need to have the CreateUser module in our head while we're working on UpdateUser or DeleteUser.

Perhaps this problem is worse in our set up because we have only very thin 'models', which are basically just Mongoose wrappers around MongoDB, and so our UpdateUser models is still quite heavily coupled to our database.

All things considered, I've found the schema described in this article is better than any alternatives that we've tried. Perhaps we're just floating at the equilibrium point where either more or less abstraction would make the code more complicated. Certainly we refactor as soon as we can when a single module gets too complex. As always, pragmatism rules.

</comment><comment><USER22> Given code like this:

        class RatingsController < ApplicationController

          def create
            success = RatesBusiness.add_rating(params[:business_id],
                                               params[:score],
                                               current_user)
            render json: {success: success}
          end
        end

Wouldn't it be better something like this (just to adapt to rails)?

        class RatingsController < ApplicationController
          logic = RatesBusiness
        end

Or, even better

        class ApplicationController < Controller
          def initialize(logic):
            // do something
          end

          def create:
            // do something with the logic
          end
        end

And adding some routes for each logic.

But, then, you could just extract the route from the logic name (and get the rails controller back, that now it would be called "Logic")

My point is that extracting code just for the fun of it seems worthless. What is the rationale in this case?

<comment><USER20> What you're talking about looks like (is...) dependency injection. Rails is a response to the Java FactorySingletonWidgetFactoryClass culture, so the question is does DI benefit Rails, or simply allows us to pontificate about our code? Which is what DHH is arguing against.

In my experience DI has been a great pattern for writing testable code, so do you have any resources relevant to DI in Rails, and why it (DI) is more beneficial than the OPs argument of a Service based architecture? (other than a simple google search like I did?)

<comment><USER22> I am just pointing out that refactoring the code he proposed, removing duplicate code, we arrive again at the Rails controller he does not like.

I see duplicate code all over this "service based architecture".

<comment><USER20> I mostly agree, with the exception of the initializer, something I haven't seen put to much use in controllers. The main thrust of my question was, do you have any links/examples for a DI based rails controller? Other than your "in theory" refactoring?

<comment><USER22> I do have examples of similar things but I cannot disclose the code as it was written in closed applications. For instance, I am guilty of redoing poorly the java servlet API using servlets.

</comment></comment></comment></comment></comment><comment><USER23> As far as I can see, he's advocating a MVC approach. The controller is used for handling View input/output. The Model is where the data and business logic is supposed to go. For some reason most people think the Controller is where the business logic is supposed to go, but when you research The MVC Pattern, that's not how it's described.

If you don't believe me, let me give you a little history. The MVC Pattern was created because of this problem: "I made this cool app with a fat client UI and now the higher ups want a way to view it from a web page. This is so freaking hard because the UI and the data and logic are all mixed together. How could I have planned ahead for this?"

MVC is the answer. You take the View and the Control, make them specific to the UI and then you put your UI agnostic code (this includes data AND business logic) in the Model. That way, when the higher ups want a new UI, you just have to create new View and the Controller code.

<comment><USER24> MVC is great for managing the display layer, but it doesn't really cover how to manage your domain logic. IME, MVC scales best when the "model" is a logicless DTO created by a business layer.

For small scale apps this is overkill, and you can squash persistence and business logic into the model. But for some complex apps you really benefit from a multi-layer approach.

</comment></comment><comment><USER25> It's a pretty good practice in MVC. I don't work with Rails, but in ASP.NET MVC, i put controller logic behind IBusinessTask generic interface which defines a type for input and output of its single `Execute` method. Any implementation of this interface would call the Business tier to perform its task. These implementations are then injected into controller via property or constructor injection.

</comment><comment><USER26> Bah! Poppycock! My domain objects are also logicless, and I keep all my enterprise stuff in PL/SQL. Also, TDD is for people who can't do formal methods.

<comment><AUTHOR> sounds fancy, can you elaborate?

<comment><USER27> Yes, for $250/hour Corp-to-corp billing.

<comment><USER28> Wow! Sounds expensive, must be worth it.

</comment></comment></comment></comment><comment><USER29> What to do about callbacks in the models?

<comment><USER10> I suppose we don't want to test the fact that Rails does a callback, we would want to test the callback logic. We would test our domain class and then test if the model class has a callback.

</comment></comment><comment><USER30> Well, basically this is the approach of Application Service pattern, isn't it?

<comment><AUTHOR> I guess, but I am not informed enough to make a well-grounded statement about this. I guess this is Don't-keep-your-logic-in-delivery pattern.

</comment></comment><comment><USER31> "I look at Rails as web presentation layer, it makes my app work in the browser."

Yes! YES! Not just rails. Any web app regardless of language or framework. Thank you for writing this. It's what Richard C. Martin (Uncle Bob) calls the lost years ... and about 15 of them. Reading books on good object oriented design from 1993 sheds more light on how to build proper systems (that just happen to have their delivery mechanism as the web).

The interface should be able to be changed. Right now, this is very difficult in most frameworks (I do PHP but Uncle Bob uses Rails as his example ... it really doesn't matter) and it's quite sad. This isn't a philosophical or abstract discussion. This is about how to build software the right way.

You're not building a web app. You're building an app whose delivery mechanism happens to be the web.

See Uncle Bob's talk: <http://vimeo.com/43612849>

Period.</comment>


Ask HN: What's the best service for phone number verification? - <AUTHOR>

Considering writing an app with phone number login using a verification system - I was considering rolling my own using Twilio (asking the user to call a number and add a code or get an SMS and enter a code), but I was wondering if there are any better solutions that work OOTB. <comment><USER2> For a mobile app, I developed recently, I tried the following services:

[https://www.nexmo.com/product/verify/](https://www.nexmo.com/product/verify/) [https://getprove.com/](https://getprove.com/)

In terms of ease of use and reliability, I preferred Nexmo. But however, I faced issues sending sms to VOIP numbers with Nexmo.

I ended up using Twilio and Parse (it was the backend anyway) to get a verification service running. You can use this [http://shamadeh.com/blog/web/mobile/twilio/parse/2014/07/31/...](http://shamadeh.com/blog/web/mobile/twilio/parse/2014/07/31/VerifyPhoneNumbersTwilioAndParse.html) as a starting point!

<comment><USER3> Here is a link to Twilio Lookup [https://www.twilio.com/lookup](https://www.twilio.com/lookup)

<comment><USER2> Twilio lookup gets you details about the carrier and whether it is voice/sms enabled. Basically used to validate if you have number that enables communication. This service is not the same as the verification API the OP is talking about!

</comment></comment></comment><comment><USER4> Twilio has a product specifically for the 'get a code via SMS and verify it' use case: [https://www.twilio.com/authy](https://www.twilio.com/authy)</comment>


Nasa just made all its research available online for free - <AUTHOR> http://www.independent.co.uk/news/science/nasa-research-available-free-online-a7200011.html <comment><USER3> I'm actually curious what is new within this. As it stands, NASA research pre- prints are available on the tech reports server ([http://www.sti.nasa.gov/](http://www.sti.nasa.gov/)), typically right after the export control review process.

edit: maybe it's related to certain journals where there wasn't access on the STI server? Seems odd to me. For the 8 years that I've been at NASA, it's always been expected that my group's work had to be accessible.

edit2: not all rules are universal across the agency, so my experience may be too specific to Glenn Research Center/my division. In any case, the more open, the better.

<comment><USER4> NASA yanked a lot of material away from their NTRS (NASA technical reports server) some years ago. A lot of research papers that I would have needed in my research were gone. I can find some of that stuff via Sci-Hub but not everything.

At one point I was looking for a retracted paper and I even contacted my local (non-US) representative (the contact that was listed in NTRS) to try to get that paper, but they didn't even try to help me.

A lot of the retracted papers were fundamental research dating back to the space race era.

Glad to see more research being published but really, a lot of it was previously available but got yanked due to politics.

<comment><USER3> Interesting, I was not aware that they had done this!

</comment></comment></comment><comment><USER5> > Nasa announced it is making all its publicly funded research available > online for free

This is the way things ought to be for all publicly funded research, not just NASA. Thank you, NASA, for leading the way.

The beginning of technological progress for mankind started with writing, the beginning of the industrial revolution started with the printing press. Having all the world's knowledge available on your desktop just a click away is the beginning of another exponential leap forward.

<comment><USER6> I was born in the 70s, so I still remember middle school research papers that required no less than 4 sources sited, only one of which could be an encyclopedia. In any case, it still gives me pause to consider that I have a box with almost instantaneous access to the wealth of the world's information in my pocket.

<comment><USER7> I was born a few years after WWII. I used to have a library occupying many shelves of about 10 years of CACM, JACM, SigPLAN, and other CS journals, along with file cabinets full of copies of research papers from other journals (like _Software Practice & Experience_ and _ACTA Informatics_ ). There simply was no other way to look things up: curious about Alpha-Beta pruning? You had to find Knuth's 1975 article on it, published in _Artificial Intelligence_.

Things are so different and so much better now. However, I do find that the way I can so quickly browse so many publications, blogs, wikipedia, and source on the internet means that I don't retain the information I do process as well as I did when I had to find a research paper in a university research library, read it, and take notes. In the pre-www days I had an almost photographic ability to remember the research papers I read; now, not so much. (Maybe it's age, my wife has to help me find my car keys!)

<comment><USER8> _> However, I do find that the way I can so quickly browse so many publications, blogs, wikipedia, and source on the internet means that I don't retain the information I do process as well as I did when I had to find a research paper in a university research library, read it, and take notes._

Being in my 30's I agree with the sentiment; I think it is the price to be able to explore more, and more quickly. I think that the case now is that if you want to retain something, then it is a different process than the exploration stage, while before the current state of affairs both processes were less decoupled.

</comment></comment></comment></comment><comment><USER9> Link to the actual data [0].

Looks pretty neat actually. This seems to stem from an executive order by President Obama in 2013. Mobile browsing is okay but I'm excited to check out some of the APIs when I get back to my computer a bit later on. They're seperated by category (Earth Science, Aerospace, etc).

Seems like a lot of the data is already queryable by their api's and I assume there are data dumps and research papers available as well.

Very cool. There is a serious wealth of data and apis available for tinkerers and builders these days from watson to NYC data to Nasa!

[0] - [http://www.nasa.gov/open/researchaccess/pubspace](http://www.nasa.gov/open/researchaccess/pubspace)

<comment><USER10> The executive order it self is part of the data released on their dataportal :) [https://data.nasa.gov/external-dataset?datasetId=5abq- kcha](https://data.nasa.gov/external-dataset?datasetId=5abq-kcha)

</comment></comment><comment><USER11> The mars tsunami link is a fun read: [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4872529/](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4872529/)

> We conclude that, on early Mars, tsunamis played a major role in generating > and resurfacing coastal terrains.

That's a fascinating thing to to think about. Reminds me of the the ocean planet they landed on in Interstellar. Although Mars had giant tsunamis caused by impacts instead of perpetual waves caused by the gravity of a black hole.

</comment><comment><USER12> Great that they're finally getting around to doing this 3 years after the order was signed.

Shouldn't it be a law that any research done with public dollars should be made available to the public for free? Any costs associated with the publishing should be built into the funding.

<comment><USER13> >Shouldn't it be a law that any research done with public dollars should be made available to the public for free? Any costs associated with the publishing should be built into the funding.

If you like. How much do you think that would cost, though? Typically journals charge about $2000 to make a paper open-access.

Now, given that extra research funding won't just magically appear, what we're basically saying is that less research should be funded, _just_ so that it can be hypothetically read by the small minority of people who wish to read it and yet aren't connected to a research institution and can't be bothered going to their local university library to arrange access.

"Ah", you say, "but at least the university libraries would save money because they'd no longer have to pay for all those journal subscriptions". Well, except they would, because of the rest of the world, and also because of all the locally-funded research which was published before this hypothetical new law came into effect.

It doesn't necessarily follow that just because research is publically funded that it should be publically available. Many things that are publically funded are not publically available, which is why I can't take a ride in an Air Force plane whenever I feel like it. Publically funded things are funded for specific purposes, which may or may not be served by making it publically available.

<comment><USER12> Do you really think it costs $2000 to publish a PDF on the Internet these days?

I'm talking about putting the documents on S3 with a simple paginated frontend that would allow searching the name/synopsis.

You must work for the government?

<comment><USER14> igf isn't saying that the technical cost of publishing the PDF is $2000. They are saying that it is what journals charge for the right to do so while also publishing in them. And yes, many academics will rather use any funds they can to pay that than not publish in those journals, so unless there is some widely-coordinated move to force the issue funds will go there for now.

While grants can enforce open-access publications, forbidding publication in other venues seems a lot more contentious.

<comment><USER12> I guess I just don't understand this kind of attitude. If it was done with public funds, it should be made available to the public. We have the means and capability to do so now.

The point of research is to be useful, even if it doesn't immediately have an application in the present, it could form the basis of something new in the future. Not having easy access to this institutional knowledge decreases the value to the public, or putting it behind a paywall and restricting access could prevent a non-standard performer or individual contributor from obtaining access and thereby benefiting.

I think the motivations in the academic world is very flawed. If I were an academic my goal would be to provide my work to the largest audience I possibly could, so there likelihood of someone benefiting from it would be the highest. This is especially true for research that has no present application. It should be highly accessible and available to anyone if the public has paid for the academic to live, eat, and generally do the work.

</comment></comment></comment></comment></comment><comment><USER15> Ok, so maybe I'm missing something, but what's new here? Is it just the portal?

I've been reading NASA technical papers and publications for years, and although most of the research I was reading was very focused in a specific field, everything I wanted to see was freely available. Even some of the publications linked in the article have been online for a decent amount of time.

<comment><USER16> I've read NASA tech reports for years too; seems like one of those things that's "always" been online, though I don't know when precisely it went online. It's been online long enough, at least, to have even accumulated some episodes of backlash. In 2013, it was forced offline for a few months, because Congresspeople claimed that it might include content The Chinese could use to reconstruct national-security-sensitive information, so demanded that reports undergo a security audit: [http://fas.org/blogs/secrecy/2013/03/ntrs_dark/](http://fas.org/blogs/secrecy/2013/03/ntrs_dark/)

</comment></comment><comment><USER17> Searching the web portal leads to a PMC database query with the filter "nasa funded". Here's a link to a query with just that filter, which returns all 863 articles:

[http://www.ncbi.nlm.nih.gov/pmc/?term=%22nasa+funded%22%5BFi...](http://www.ncbi.nlm.nih.gov/pmc/?term=%22nasa+funded%22%5BFilter%5D)

</comment><comment><USER18> Saying that "all" of NASA's research is being made available is a stretch given it's known they work on a lot of classified projects with the military, intelligence, etc.:

[http://nsarchive.gwu.edu/NSAEBB/NSAEBB509/](http://nsarchive.gwu.edu/NSAEBB/NSAEBB509/)

</comment><comment><USER19> This article is so misleading. NASA is requiring that the pubished research papers be public. The research discoveries are still owned by the Universities that did the research - the Bayh Dole Act is still in effect. [https://en.wikipedia.org/wiki/Bayh%E2%80%93Dole_Act](https://en.wikipedia.org/wiki/Bayh%E2%80%93Dole_Act)

</comment><comment><USER20> Title should read "some" rather than "all"

</comment><comment><USER7> Not NASA, but related: I really want the raw climate data and atmospheric models to be made open and publicly available. I don't understand how researchers can claim that climate change is the most serious problem facing our species while at the same time hiding what they are doing. I know that some data is available, but considering that our government funds most of the research why haven't they put this stuff up on github?

Is the secrecy really necessary in order to get tenure and win grants?

<comment><USER21> > hiding what they are doing

Would you back up this claim? There is too much rumor and propaganda around about climate science, so I feel we should take extra care to substantiate any claims.

I generally like the idea of scientific data being public, but the theory that there is a conspiracy of climate scientists (of which the claim that data is being 'hidden' is a building block) is tiresome and distracting from the very real, critical problems.

<comment><USER7> From the IPCC's _Climate Change 2013: The Physical Science Basis. Contribution of Working Group I to the Fifth Assess- ment Report of the Intergovernmental Panel on Climate Change_ , Chapter 9 Evaluation of Climate Models, pp. 749-750.

> With very few exceptions (Mauritsen et al., 2012; Hourdin et al., 2013) > modelling centres do not routinely describe in detail how they tune their > models. Therefore the complete list of observational constraints toward > which a particular model is tuned is generally not available.

From the House of Commons Science and Technology report _The disclosure of climate data from the Climatic Research Unit at the University of East Anglia_ paragraph 54:

> 54\. It is not standard practice in climate science and many other fields to > publish the raw data and the computer code in academic papers. We think that > this is problematic because climate science is a matter of global importance > and of public interest, and therefore the quality and transparency of the > science should be irreproachable. We therefore consider that climate > scientists should take steps to make available all the data used to generate > their published work, including raw data; and it should also be made clear > and referenced where data has been used but, because of commercial or > national security reasons is not available. Scientists are also, under > Freedom of Information laws and under the rules of normal scientific > conduct, entitled to withhold data which is due to be published under the > peer-review process.78 In addition, scientists should take steps to make > available in full their methodological workings, including the computer > codes. Data and methodological workings should be provided via the internet. > There should be enough information published to allow verification.

<comment><USER21> Thanks for doing the legwork to find and provide that; while the first cite is a narrow case, the second looks great.

> It is not standard practice in climate science and many other fields ...

I think this statement supports the idea that the actions of climate scientists are not a conspiracy, but normal practice in scientific research. I've read similar things in many other contexts.

On principle, I think all scientific data (and papers) should be open and free. In practice, I would need to know far more about the costs, value, and implications before demanding it.

On a practical level, very, very few would have the knowledge, skill, resources (software, etc.), time, and motivation to make use of the data. Very few outside any particular field even read that field's papers, much less try to work with the data. Likely, anyone in the general public trying to do so would interfere with the 'signal' of discourse by creating only noise - <USER2> open data could hurt more than help. If it costs a lot to produce the data, it's very possible that most of that expense would be a waste. OTOH, sometimes that noise and cost is the price of democracy.

<comment><USER7> Yes, and to be realistic, the researchers themselves are in a very competitive environment. Having done many years of graduate work, I realize just how hard it is for doctoral and post-doc students to break into a good position at a research university, but that's just the beginning. There is serious competition after that for tenure and grants.

Who want's to spend time dealing with FOIA (freedom of information act) requests from kooky skeptics while worrying that some other researcher will scoop your research? There are structural impediments in our university research environments to completely open science.

However, I'm hopeful because of the success that the software community has had with open software. Before Richard Stallman started the Free Software Foundation I would never have believed that such a transformation of the industry was possible.

</comment></comment></comment></comment></comment><comment><USER22> At last... I remember Richard Feynman complaining exactly about this!

</comment><comment><USER23> Great! I glanced over it and I think the next step is to have them provide a For Dumbasses version of pretty much all of it...

</comment><comment><USER24> Has anyone looked at the resource? Are there data sets and other similar things that could be used in novel ways?

</comment><comment><USER25> following Space X as a top competitor

</comment><comment><USER26> Including about set design of the moon for the landing?

(For those who just threw a fit.. it's a joke)

<comment><USER27> Seen this video? BUZr0Wr0v-s</comment></comment>


Introducing "Zero," a new app to help you fast - <AUTHOR> https://medium.com/@kevinrose/introducing-zero-a-new-app-to-help-you-fast-209935e8245d#.2sxlkwm4n <comment><USER2> The reasons given for needing an app to do this are spurious. Classic case of over-complicating a simple thing.

<comment><USER3> I saw an app for 5 minute meditation (I think it is a yc company) [https://www.simplehabitapp.com](https://www.simplehabitapp.com) it is one year for a $100 or something or $300 for lifetime. I think a lot of people believe that if they spend money, it makes them more likely to follow what they set out to do. App creators are more than happy to provide that service (exercise apps, weight tracking apps, etc.)

<comment><USER4> For sure. It makes them accountable. Check out why dietbet.com (no affiliation) works for the same reason.

</comment></comment></comment><comment><USER5>
      Within 7 days, I had dropped five pounds.

Using just scale-weight changes to pronounce a diet a "success" is folly. Any glucose-reducing diet will produce considerable water loss.

I lost _13 pounds_ in less than 36 hours the first time I went keto. I then lost virtually nothing in the subsequent 3 weeks.

</comment><comment><USER6> This is a related video that I believe is worth watching: Longevity & Why I now eat One Meal a Day [https://www.youtube.com/watch?v=PKfR6bAXr-c](https://www.youtube.com/watch?v=PKfR6bAXr-c)

</comment><comment><USER7> Wouldn't it be wiser to skip dinner instead of breakfast?

<comment><USER8> No it doesn't you use nutrients in your sleep going to bed on an empty stomach is not healthy and mentally harsher than skipping breakfast and taking an early lunch.

<comment><USER9> this is really interesting, do you have a source?

</comment></comment></comment><comment><USER10> It would be nice if we could remove the "@KevinRose" bit from this title. Allowing that kind of callout further promotes the growing concern (reality?) that the people behind a startup matters more than what problem the startup is actually trying to solve.

If someone is really wondering what Kevin Rose is up to they can do a simple search and find out.

<comment><USER11> I first parsed this as an app to help you message Kevin Rose quickly.

</comment></comment><comment><USER12> So once you get the bad PR of someone dying from using the app and possibly investigated by the FDA/FTC who will want to use the app? This is one of the scariest apps I have ever come across.

<comment><USER13> I would be fascinated to learn the death toll associated with skipping breakfast.

<comment><USER14> I see lots of people who run on just coffee for breakfast. They are also some really cranky motherfuckers till they've had lunch.</comment></comment></comment>


College ordered to pay more than $1B for misleading students - <AUTHOR> https://treeangle.co.id/news/90157/2016/03/college-ordered-to-pay-more-than-1b-for-misleading-students <comment><USER2> WARNING: obnoxious overlay ad redirects you to popup when you try to dismiss it.</comment>


NASA will live-stream loss of signal as Cassini burn up in atmosphere of Saturn - <AUTHOR> https://www.nasa.gov/press-release/nasa-announces-cassini-end-of-mission-media-activities <comment><AUTHOR> Here is the end-of-mission timeline.

[https://saturn.jpl.nasa.gov/mission/grand-finale/cassini- end...](https://saturn.jpl.nasa.gov/mission/grand-finale/cassini-end-of- mission-timeline/)

In particular, Cassini is expected to burn up at about 6:30am on Friday morning, but because the light travel time from Saturn will be ~83mins, Cassini's signal will not fall silent until 7:53-7:55am.</comment>


What3Words – three words identify each location on Earth - <AUTHOR> https://map.what3words.com/ <comment><USER2> For fuck's sake give up on this pointless crap. Every few weeks it raises its ugly head on HN. I'm sick of seeing it</comment>


Introduction to Hidden Markov Models with Python - <AUTHOR> http://www.blackarbs.com/blog/introduction-hidden-markov-models-python-networkx-sklearn/2/9/2017 <comment><USER2> I would vote up except for the scatalogical humor.</comment>


How I realised "Free Software" is a better term than "Open Source" - <AUTHOR> http://www.naughtycomputer.uk/free_software_better_than_open_source.html <comment><USER3> >> It's not really about Freedom at all, because >99% of computer users are non-programmers.

> Free Software gives us as a society the freedom to control our computers. > And it gives us as individuals the freedom learn how to program them if we > want to.

Most people are not car mechanics yet they benefit from the rules that require 3 party products and repair shops to be allowed to operate.

And the ability to rapidly build upon the work of others reduces the barriers for new, interesting products to be built, which benefits everyone, even non- programmers.

<comment><USER4> Yes but you system is unable to create monopolies which is what business owners want.

<comment><USER5> Only big fish businesses benefit from monopolizing markets, everybody else suffers from it.

<comment><USER6> Those are the ones who pay politicians to change laws for their benefit.

</comment></comment></comment></comment><comment><USER7> When I talk about free software I make sure to mention the word 'infrastructure' because that's what it is. Just like roads or electricity it is a predicate for building a business (life) on top of.

Look at the biggest companies in the world (google, apple, facebook , amazon, microsoft ..) they own platforms i.e. infrastructure! but since these platforms aren't free you hear constant complaints from those who try to build a life on top of them (app store ranking not fair? Search not fair? OS/messenger/web browser/social network is walled garden? Etc.)

But even breathe the suggestion that taxes should support building reliable infrastructure (i.e. already existing free software projects) and you'll get a "government shouldn't interfere with functioning business" response.. no matter what structural risk that business carries for society and even though the "interfering" is just offering a viable alternative.

<comment><USER8> I would be happy if taxes couldn't be used to pay for nonfree software. If all government servers and government office PCs and school computers _had_ to run free software, there surely would be money to support its development.

<comment><USER9> FWIW, the goal of the still-working-to-fully-launch funding system Snowdrift.coop is to do the best we could on a voluntary basis in the absence of tax-funded free/libre/open work. Like all public goods, these things are the sort that make sense to fund through taxation, but getting political power to make that happen is even harder than a half-way effort to increase voluntary mutually-assured donations…

<comment><USER10> I'd love it if SD.C allowed users to contribute extra money each period that was banked as an endowment-like-fund and drawn on only to cover unexpected shortages.

They're doing neat things, and I'd love to see it up and running.

</comment></comment></comment></comment><comment><USER11> I've been kicking around a business plan idea for about seven years: A software marketplace for items under a GNU license. The key: I neglect to put that fact in the marketing.

The full license is posted with the software download, via a pop up EULA-style window before the download proceeds complete with an "I Agree" nuisance button.

The market starts with a price discovery model where I suggest a price and allow the person pay whatever they want. After some data gathering, I simply obfuscate the "pick-your-price" mechanism.

Yes, this is a bit of cherry-picking, where I employ some dark patterns. My reason for this thought experiment is the crux of this article and discussion: How do you explain software in the English language for which the rights of the end user are enshrined while leaving a profit-path open for the creator? My reply is: You don't. You focus, instead, on making the process of obtaining the software as friendly and service-oriented as possible.

I wonder how spectacularly this idea will fail?

<comment><USER12> Any free or open source software license does not need an EULA, and presenting it as such is antithetical to the entire idea of free software.

You by definition do not need to agree to any free software license before you use the software, you can vehemently disagree with it or completely ignore its existence.

The license only exists to give you _extra_ rights you didn't already have under standard copyright law (permission to distribute the program & modify it, under certain conditions).

An EULA is a dubious legal hack used by proprietary software to deprive you of rights you'd have had anyway if not for the EULA, which is the exact opposite of how free software works.

Edit: A lot of people are replying to this saying I'm incorrect. I'm not. A lot of free software licenses such as the GPL v2 spell out explicitly that they have nothing to do with anything except copying/distribution or modification:

        > Activities other than copying, distribution
        > and modification are not covered by this License;
        > they are outside its scope.[...]

The GPL v3 says the same thing in different words, and as FigBug points out downthread the general FSF license FAQ makes this clear[1].

The Open Source definition also asserts this by proxy. Licenses aren't allowed to impose any restrictions on users that they wouldn't have anyway if they had no license to the software.

Really, if you use free software you can just completely ignore all the licenses and you don't need to understand or have read any of them. This is one of the beautiful things about free software that separates it from EULA- using proprietary software.

Of course you need to understand the licenses if you want to distribute the software in any way, but that entirely falls under the umbrella of activity you didn't have permission for without the license, it would be copyright infringement by default.

This is also why free software organizations like the FSF would as a last resort sue someone for copyright infringement, not violating the GPL (but of course adhering to the GPL would bring them back into compliance).

This is different from proprietary software companies which might sue you over violations of their own made up rules, which you supposedly agreed to via the EULA.

The EULA is a hack to try to apply contract law to your use of the program, whereas free software & open source licenses purely piggy-back on copyright law.

All those licenses are a way to say "here's stuff we allow you to do, which you didn't have legal permission to do anyway in the absence of this license, given certain conditions" (or no conditions for e.g. the WFTPL).

1\. [https://www.gnu.org/licenses/gpl- faq.en.html#NoDistributionR...](https://www.gnu.org/licenses/gpl- faq.en.html#NoDistributionRequirements)

<comment><USER13> Both EULAs and FOSS licenses are _license agreements_. Presenting them in the same way is not disingenuous. The length of the GNU GPL rivals that of some EULAs.

If you do not need to agree to a license before you use a piece of software, then EULAs would be invalid. You _do_ need to agree to the license before you use the software. That the license grants permission to run the software for any purpose, usually with a disclaimer of liability, is irrelevant.

If you do not comply with (for instance), the terms of the GNU GPLv2, then you no longer have a license to the software. That means that you must cease distributing _and using_ that piece of software or be at risk of a lawsuit from the copyright holder.

<comment><USER14> _If you do not need to agree to a license before you use a piece of software, then EULAs would be invalid._

As they should be according to 17 USC 117: [https://www.law.cornell.edu/uscode/text/17/117](https://www.law.cornell.edu/uscode/text/17/117)

The standard dodge is that it refers to the "owner of a copy", while EULAs claim that you do not own a copy and are only "licensing" it. Which is BS in my opinion, but regardless the GPL specifically doesn't make that claim, so you don't need to accept anything to run GPL software.

</comment></comment></comment></comment><comment><USER15> I'm personally not a fan of the term free software. It makes me think of trashy freemium software filled with ads and tricks to get you to install browser extensions. Using the term open source creates a nice distinction between ad funded software and truly free software.

<comment><USER16> In contrast, for me "open source" literally means opened sources, i.e. one can read the source code. "Libre software" or FLOSS may be better alternatives for those who care.

<comment><USER17> "Libre software" and FLOSS immediately sound politicized to my ear.

As in, such projects carry baggage, in the form of conflict and infighting among developers, and one can expect irritating pedantry when discussing use and preferences.

Usually, you'll encounter something akin to fanatical fans, expressing highly opinionated views about minor details. Sometimes it's because lawyers have been involved. It's not necessarily toxic, but often reflects splintered cellular activity, among groups seeking to distinguish themselves from one another for some reason.

<comment><USER16> >"Libre software" and FLOSS immediately sound politicized to my ear.

They are, because pursuing your rights is a political move.

"Free software is a political movement; open source is a development model." — Richard Stallman [1]

[1] [https://en.wikipedia.org/wiki/Richard_Stallman#cite_note-95](https://en.wikipedia.org/wiki/Richard_Stallman#cite_note-95)

>Usually, you'll encounter something akin to fanatical fans <...>

As in any fight for freedom there are all kinds of people: those who do not understand, those who pretend they do not understand, those who do not know why they are fighting, and so on. No one of them defines the goal of the fight though.

<comment><USER18> The early Linux movement that later became part of the Open Source movement was certainly also political. Stallman was actually one of the heroes of that movement, which he apparently didn't realize. The difference was strategy. The FSF wanted to ideologically educate and convert people while most people in the Linux movement were focused on the number of users. The more users the more influence. Facts on the ground instead of ideology. History has proven them right.

</comment></comment></comment></comment></comment><comment><USER19> At snowdrift.coop we believe both freedom and openness are important values, neither of which encompasses the other. So, we use the acronym FLO, for free/libre/open, which has the nice side effect of sounding like the English word "flow".

[https://wiki.snowdrift.coop/about/free-libre- open](https://wiki.snowdrift.coop/about/free-libre-open)

\---

The author misses the most important reason, in my opinion, why "free software" is _also_ a bad term: people think they already know what it means, and thus don't really pay attention when you try to explain it. As such, I've stopped using it completely during my advocacy.

Instead, I use "FLO software", "software freedom", or "unrestricted software" \- the latter being good for when I don't have time to explain fully but also don't want to give the wrong impression.

</comment><comment><USER20> I realize that Stallman is a polarizing character, but I think the best rationale for Free Software (the concept, perhaps not the term) being better than Open Source is articulated by Stallman himself: [https://www.gnu.org/philosophy/open-source-misses-the- point....](https://www.gnu.org/philosophy/open-source-misses-the-point.html)

I liken democratic institutions such as free elections and due process to the differences between Open Source and Free Software. We don't do these things primarily because of their instrumental utility or because they necessarily yield the "best" results (e.g. Brexit, Trump, climate policy, etc.). We could imagine a political framework with a benevolent computer working as dictator that might do a better job, for some definition of better.

Instead, we have free elections and due process because we believe that they are, morally and ethically speaking, the right thing to do. If you believe as I do, that the human capacity for reasoning is greatly magnified by computers, then that's a recognition that human cognition and computers are in some way linked. Computers are the factors of production. De-democratizing those factors of production—even if Microsoft/Apple/Google/Facebook make a great product—is de-democratizing human thought to some degree.

</comment><comment><USER21> I foresee that in about 10 years time when everything besides the Linux kernel has been replaced by business friendly licenses, we will be back to the days of shareware and public domain.

Personally I don't care, as I mostly use commercial software, but I bet those FOSS devs that helped change the landscape and won't be able to access whatever code comes in their devices might think otherwise.

<comment> loup-vaillant > _I mostly use commercial software,_

You probably meant " _proprietary_ software". Please say so.

Much free software is also commercial. A famous example is RedHat. A less famous, but much more common example is custom software: written for a fee, it is definitely commercial. And it's Free too much of the time: customers often have access to the source code, and the right to do whatever they want with it.

 _" Free" and "commercial" are not mutually exclusive._

<comment><USER22> "Much free software is also commercial."

Almost all commercial software is proprietary. So much that free is barely a blip on the radar. It's reasonable default much like a person can say they ate a lobster without specifying it was red rather than the ultra-rare blue or gold varieties. Everyone will assume the default of red unless specified otherwise.

<comment><USER23> My OS (macOS), laptop, router, gaming console, watch, camera, computer, phone, tablet, TV, set-top box, GPS unit and more run commercial software. They all include "free software" somewhere in the stack. Whether it's the Linux kernel, uclibc, busybox, libpng/libjpeg/libtiff or Webkit, it's there.

It's much more prevalent than people think, partly because it is rarely discussed or acknowledged.

If we look at web applications, you can be assured that the vast majority of them use free software somewhere in the stack. It's usually the case that the majority of dependencies in such products are "free".

<comment><USER21> Your OS has a tiny layer of FOSS, which was partly part of NeXTSTEP and what Apple needs for UNIX compatibility.

Everything that makes OS X special is proprietary.

<comment><USER22> Exactly. The core that was open-source, but not FOSS per FSF, is a system almost no Mac user will directly use or develop apps for. The experience Mac users get is almost totally proprietary by Apple. It's not only theirs in copyright: they patent every aspect they can to sue anyone doing something similar. Samsung will happily attest to that. Mac OS is about as non-FOSS as it gets. Right up there with Windows on proprietary components, lock-in, and patent suits by owner.

At least they're doing a nice, open-source project with LLVM. I'll give them credit where it's due.

</comment></comment></comment></comment></comment></comment><comment><USER24> I'm looking forward to the followup where they realize "Free and Open" is a better term than "Free" or "Open."

</comment><comment><USER25> What?

As _terms_ , none is "better" than the other, those are _different_ things. A simple google search will reveal the definitions.

</comment><comment><USER26> > A month ago I wrote an article called "How I realised "Open Source" is a > better term than "Free Software"". Now I change my mind completely and > explain why everything I said was actually wrong.

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

</comment><comment><USER27> This is a bit funny. His argument is that the "Free Software" explanation is longer and thus gives you more opportunity to explain it properly.

However originally the opposite is the case: The FSF explains free software with the four freedoms [1], the OSIs Open Source Definition has 10 points [2]. If you dig into them you'll realize that they more or less mean the same. Which is also usually the point I tend to make in these debates: How you call it isn't so important, important is what it means.

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

[2] [https://opensource.org/osd-annotated](https://opensource.org/osd- annotated)

</comment><comment><USER28> The main point seems to be that the term "free software" is misleading, so you get to describe its benefits when someone asks you what it is.

<comment><USER29> Or, more likely, the term is so effective at misleading that 99% of people hearing a reference to it assume it means software they don't have to pay for, and don't ask what it means at all. cf Open Source, which is unlikely to be misunderstood and likely to be the basis for a discussion on why access to source code is important with anyone that isn't familiar with the concept.

The whole article reads like parody tbh. Also like the argument that true software freedom involves not being free to use proprietary software, because politics, and the bit about treating non-free software users as heretics also being important for "a society that stands up for what is good"

<comment><USER22> My thoughts exactly. I get what they're trying to do with the free software term but they're ignoring the psychology of the masses. Once a definition has taken hold, it's best to use it the way it was solidified or create a new one for a new concept. Bringing up "free," correcting the user that it's about political freedom, politicizing software, and so on will bring up many tangents like how people will get paid or should they.

Open-source w/ its differentiators focuses right on the benefits to the user. I follow-up with real-world examples with things such as car development or repair to help them see necessity of the benefits. Also explain how copyright and patent monopolies reinforce the problems with simplest examples I can get. This approach has worked well where people usually agree with most of it regardless of political spectrum. The next thing they ask is about quality of stuff nobody was paid to write. Replies to that seem to boil down to whether they trust me to assess and tell them the truth. Very impacted by their own beliefs on work ethic and markets.

</comment></comment></comment><comment><USER30> Think about a cell-phone which has a built-in battery you can't replace. Isn't that bit like software you can't modify?

Now should we require the cell-phone manufacturers to make their batteries replaceable on ideological basis? It probably makes it cheaper to produce the cell-phone if the battery is non-replaceable.

Similarly making your software open-source probably has costs associated with it.

Should we insist that every producer of software must make their product open- source? If it is unethical to produce closed-source software then clearly we should. No?

<comment><USER31> >It probably makes it cheaper to produce the cell-phone if the battery is non- replaceable.

From the manufacturers point of view, it's cheaper and more profitable. It doesn't help the consumer though, I upgraded phones sooner than I otherwise would have because my battery was dying.

>Similarly making your software open-source probably has costs associated with it.

In the current climate, yes. If all software was already free, you could save a lot of money not needing to repeat work that has been done.

We ideally should insist all software is free, but not everyone agrees that proprietary software is unethical and laws aren't always driven by what is ethical.

</comment></comment><comment><USER32> What Open Source achieved is that we can now build businesses and consimer products quickly by sharing innovation with few strings attached.

Free software has limited overlap with that particular benefit of Open Source.

At this point in time I think of the two things as widely different so the question does not even come up what's the better term.

<comment><USER33> True so long as you aren't including GPL2 or GPL3 as open source - <USER2> of strings there for anyone with a hardware or software patent, which is why so many billions have been spent replacing those licenses with more liberal (MIT, BSD) ones across so much software.

<comment><USER21> So how well are *BSD doing in the market in regards to GNU/Linux?

When the only thing standing will be the Linux kernel, don't be surprised by the amount of "freedom" you will get.

<comment><USER33> The rights granted to the Linux kernel are "stranded" \- the kernel can't do anything by itself so licensing to only it doesn't matter, so Google paid to redo the GNU libraries under a BSD license to strand the kernel rights. Even so, with Fuschia Google is replacing the Linux kernel, too, with its own BSD (or MIT) licensed kernel. So, BSD is actually taking the whole field, particularly measured by sales.

<comment><USER21> The license yes, but not the BSD operating systems variants.

How much do you think companies will bother to give back once they alienated GPL software, given the actual contributions?

Nothing of relevance I tell you, just enough to keep the masses happy, AOSP style.

I won't care, as I said I mostly use commercial software anyway, but it will feel good to say "I told you so".

<comment><USER34> > How much do you think companies will bother to give back once they alienated > GPL software, given the actual contributions?

Plenty of permissively-licensed software projects have strong contributions from commercial users.

<comment><USER21> Such as?

The AOSP, _BSD and LLVM ones surely aren 't such projects.

AOSP doesn't get any of the Google Services stack nor OEMs changes.

The _BSD hardly get any updates from all those routers and embedded devices using them, to the point they were forced to beg for donnations last year.

clang is being adopted by embedded vendors that had to contribute their changes back to GCC and now don't need to keep doing it.

<comment><USER34> > Such as?

SQLite and Postgres are the main examples I think of for this.

> The AOSP, BSD and LLVM ones surely aren't such projects.

AOSP is almost entirely ongoing contribution by the primary commercial user, so it would probably fit the description, though I was thinking of—without having stated—specifically third-party commercial users, so it wasn't what I had in mind.

> clang is being adopted by embedded vendors that had to contribute their > changes back to GCC and now don't need to keep doing it.

Clang has a lot of corporate contributors, including all of the big three tech companies. Not sure if any of the big contributors have closed downstream derivatives or if they are just open-source users contributing back. Sure, copyleft _prevents_ downstream use that doesn't contribute back, but it doesn't necessarily maximize contributions back.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER35> I always wish they used the term "liberated" rather then "free". "Liberated software" detaches from prices, detaches from licensing, keeps the desired political associations, and translates fairly well internationally.

<comment><USER36> I understand where you're coming from. To me, "liberated" implies that the software wasn't free in the past. I think that's one of the reasons for the use of "libre" in some circles.

Now I've got images of a commando raid on a data center running through my head. They're throwing open the doors to the cages and racks. Jerry Bruckheimer, call me. Let's talk.

<comment><USER35> I suppose so, but I don't see that as a disadvantage of the term, in fact it opens up an interesting aspect of it: all software is, in a sense, imprisoned by default. The author must explicitly "liberate" it for it to be considered free.

</comment></comment></comment><comment><USER37> I found this Richard Stallman talk to be fantastic (found it here on HN) [http://audio-video.gnu.org/audio/rms-speech- arsdigita2001.og...](http://audio-video.gnu.org/audio/rms-speech- arsdigita2001.ogg)

In it he describes that he searched for better terms than "free" as in free speech not free beer and there were 60ish of them, but they all had problems of their own.

the Free software movement did more to help open source OS's happen because it was it's goal, than open source has done to create free OS's (because their focus was only the specific problem they were solving, and not the holistic many parts of an open source OS.)

Open source is less likely to pass the same licenses and freedom it was built on down to the next iteration, for it's not legally required to do so (which is why whether you got freedom with your X software or not was a function of where you got it from. X software was free, but became unfree if you got it compiled from certain vendors.

Open source documentation is also important, as software wit documentation is better/easier to improve software.

When you use non free software, you advertise that you're ok with not helping anyone else that might want you to, because you can't give them a copy of what you have.

When about half of linux is Gnu and Gnu preceded linux, it's pretty unfair to the Gnu community that they get about 0 credit from many publications, events, the general public.

Thus you can give free software to the world, and they'll never even understand what free as in speech and not beer is.

Free software is a political movement, open source software is more politics agnostic. I think credit should be given where it is due, for only accurate assignment of credit can reward the good and punish the bad.

P.S. Stallman is happy to see you make money on Free software. Free as in speech, not beer. Also the best numbers I could find on what percentage of linux is actually Gnu code is about 8% and linux code was about 9% with the amnt of Gnu going down quickly if you were working on an embedded system. I believe those numbers were from debian and 2014, but I'd be happy to hear a better analysis.

</comment><comment><USER38> Free software is definitely better than Open Source, but only if you imply that free-as-in-freedom is granted. Otherwise you often get something free-as- in-beer only like a mobile phone OS, which you surely don't have to pay for, but restrict your use of it in many ways and doesn't respect your privacy, all aspects having nothing in common with the concept of freedom. GNU GPL grants this freedom, but the term "free" is often abused to imply free-as-in-beer without the end user noticing the difference.

</comment><comment><USER39> >> So in fact we must use only 100% Free Software to live the message and spread the message.

For work & daily computing/tinkering, I don't mind ditching Windows completely and use FOSS system like Linux (I mean GNU/Linux).

But leaving those AAA games is... kinda hard. Really really hard...

</comment><comment><USER40> [quoted as in article] >>DRM is great because it stops people pirating movies.

>It's like saying police brutality is good because it deters bad dudes. If we have to do despicable things to force people to pay for things then our society is broken.

lmao

</comment><comment><USER41> Bottom line nobody outside of the software community cares, and those in the community already know what "free software" is.

<comment><USER9> I've had TONS of experience with dozens, maybe hundreds of people professionally involved in software who did not understand free software until I talked with them.

</comment></comment><comment><USER42> Free Software makes people think of "freemium" software.

<comment><USER22> Most people just think they get it without paying for it. That's the universal definition of free at least in the U.S.. Attempts to redefine it are foolish. When they talk about freedom, they literally say freedom. I'd have gone with Freedom-Respecting Software if I was, say, trying to tie in freedom with software for a U.S. audience. I have no idea what would appeal to people in other countries.

<comment><USER43> Other countries have separate words for "free" as in speech, and "free" as in beer. Eg. french has libre and gratuit. German has frei and gratis.

<comment><USER22> I suspected as much. Thanks for tip.

</comment></comment></comment></comment><comment><USER44> And both, while noble causes, are unrealistic for most software products.

<comment><USER45> I would assert the contrary, that the types of software projects that benefit from keeping the source secret are the minority. Most software is written to fill some immediate and boring need, not as a commercial product or business logic secret sauce. There's no real downside to sharing that - most likely no one finds it useful, but on the off chance they do you suddenly have help with it.

Admittedly it's a bit of a prisoner's dilemma; no one wants to put in the (certain) effort of packaging up their software for external consumption for the (uncertain) benefit of external help. But the culture is definitely shifting.

<comment> loup-vaillant Availability bias.

Most software people see is mass-distributed software: browser, OS, office suite, games… And it is much easier to extract money mass-distributed software when it is proprietary.

In reality, most software that is actually made is _custom_ software. Software that only a handful of people see, because it has only 1 customer, if any. Making that software free makes it _easier_ to extract money from (at least in the short term), because source code availability is often sold for a price (the understanding being, giving the source code also means giving up on exclusivity for later maintenance).

<comment><USER46> > In reality, most software that is actually made is custom software.

Do you have a source for this claim? (not denying, just curious to look at the numbers!)

<comment> loup-vaillant I recall Richard Stallman saying custom software comprises over 90% of the effort. I myself has to physically meet _one_ person who is currently working on massively distributed software. (I have met some who have worked in games in the past.)

I don't have anything more precise, but it seems to make sense.</comment></comment></comment></comment></comment>


TTIP Documents Revealed - <AUTHOR> http://international.sueddeutsche.de/post/143690739565/ttippapiere <comment><USER2> The estimated benefit of TTIP is 400,000 jobs and 0.5% GDP for the EU. Not much.

Apparently, the few selected MoP in Germany who were given access to the drafts had a few hours to look at a 1000+ pages, in English legalese, with a dictionary but no internet access.

Apparently, the drafts were full of certain spelling errors. The assumption was that they were personalized and injected on purpose such that photographs could be traced back to the origin.

Source - German media coverage.

<comment><USER3> What would those MPs lose if they leaked the text? It seems like a vote- winning action...

<comment><USER4> My guess would be that they'd be gently shunned, so would probably be weighing up the relative merit of some (possibly short term) popularity against longer term merit of being able to effectively collaborate with party & peers.

<comment><USER5> What I don't get is why you would make your peers your enemy. Making the US bargaining side your enemy makes sense, but what problems would your peers have with that? Especially long term.

</comment></comment></comment></comment><comment><USER6> Why would the EU comprise citizens' health to sell a few more cars? Is it American investors on both sides?

<comment><USER7> I'm not sure that they will. The Brits at least don't seem to be interested in presenting their nethers for this chopping block.

<comment><USER8> The UK government is one of the most pro-TTIP in the EU, unfortunately.

<comment><USER9> And now you know why it's mostly being negotiated in secret. The NHS is basically the third rail of British politics. If you want to know what happens when a government tries a little too hard to undermine it, look at any of our newspapers from last Tuesday or Wednesday. If you want to know what happens when a government mounts an all-out attack on it, look up "political annihilation for at least a generation" in your dictionary of choice. The Liberal Democrats basically got wiped out as a force in British politics in a single election last time, and much of that was because of how they mishandled one sensitive issue several years earlier. Trying to force NHS privatisation and allow foreign companies to literally sue future British governments who sought to undo any resulting damage would make the tuition fees mess that brought down the Lib Dems look like a warm-up act.

</comment></comment></comment></comment><comment><USER10> > The U.S. government concurrently has criticized the fundamental prevention > principal of the EU Consumer Centre which protects 500 million Europeans > from consuming genetically modified food and hormone-treated meat.

Good for the EU. If only our government showed the same care for its own citizens.

<comment><USER11> > The U.S., for example, demands that statutory prohibitions on products to > protect human health should only be allowed to be passed if it has been > scientifically proven that these products really are harmful.

Sounds like a reasonable argument.

<comment><USER12> In a way the US is regulated by a high risk of expensive lawsuits with really high amounts of compensation if they harm someone. So a company will not release a product that _might_ be harmful because they could end up paying hundreds of million dollars of compensation to harmed people.

These kinds of lawsuits don't exist in Europe, in the worst case a company will pay $10,000 to a single person. But there are other protections in place and if you take those away you will end up with much worse protection than the US has because this _indirect_ regulation doesn't exist.

<comment><USER13> You should look up our pharmaceutical industry. They keep the risk down to a certain amount, forge the data with questionable methodology, make billions on the products, and then pay a fraction of that in settlements or whatever. Banking sector is similarly bad about stuff except with money instead of lives (most of the time).

Yes, they'll release a product that might be harmful. The tradeoff is whether they can get away with it in court. The Ford Pinto case is a classic example of that kind of thinking gone wrong. I suggest you look its details up to see how our boardrooms think on things. It was _really bad_. Least they paid for it.

</comment></comment></comment></comment><comment><USER14> I wonder whats the estimated damage of democracy to the western economies (seriously). Wouldn't it be way better to let the heads of big cooperations or their relatives rule the western world? This way trade agreements like TTIP could be done in a more open way. Nobody would be able to complain as they got no vote and legislation would be easier! Also we could forbid lobbyism and replace it with a more open and honest "Pay for Law". So vote for more open legislation by abolishing democracy. Remember making life easier for the best and richest among us is the most nobel goal in life.

</comment><comment><USER15> And they call this free market. US government bullying for benefit of the corporations and not even for the US people. This is going back to middle ages , the landlords and the peasants.

</comment><comment><USER16> How about some reciprocation on immigration laws as well? How fair and free can this agreement be if the immigration flow in one of the directions is so much easier than in the other?

<comment><USER17> Which direction is that (honest question, I suspect US -> EU being easier, but I recall companies having trouble "importing" Americans as well...)?

<comment><USER18> In fact there's no such a thing as a EU-US deal at all. US has separate deals with each EU country.

If you're from one of non-blessed EU countries (Bulgaria, Croatia, Cyprus, Romania and most notably Poland), you can not enter the US without a visa, even for tourism.

</comment></comment></comment><comment><USER19> All I see is a single post and an image of a container ship, is my browser broken or are there no documents?

<comment><USER20> > The material, consisting of 240 pages, was provided by Greenpeace and will > be published this coming Monday.

<comment><USER21> >Greenpeace Netherlands is releasing a package of leaked TTIP negotiation texts on Monday morning, at 11am CET

[http://www.greenpeace.org/international/en/press/releases/20...](http://www.greenpeace.org/international/en/press/releases/2016/Leaked- TTIP-documents-confirm-major-risks-for-climate-environment-and-consumer- safety/)

</comment></comment></comment><comment><USER22> Well doesn't that agreement sound bloody delightful. I am looking forward to reading the full text.

</comment><comment><USER23> Assuming TTIP fails, how will the next contract to attack democracy be called? QTIP? UTIP? COUP? GRACE?

At least put some effort into naming. To have your rights grind away so slowly and being coerced like a mule to even thread that mill that maims you.. Im for a law that forbids to discuss content-similar contracts that have been downvoted for at least 8 years.

</comment><comment><USER24> I just wondered about one thing. Why when the US asked (forced ?) the EU to negotiate in secret didn't the EU answer with a f.u. ? Also who are these people that agree to do this in secret ?

<comment><USER25> The EU isn't quite the democratic paradise either. We too have corporate lobbyists writing laws, and politicians and officials negotiating behind closed doors.

On average, the EU is more transparent than the EU, and politicians tend to feel more like they really should be representing the people, but it's really a sliding scale with the US just a bit further down than the EU.

I really hope transparency about the TTIP negotiations will help turn this around in both the EU and the US.

</comment></comment><comment><USER26> That overzealous secrecy around TTIP is a shame. It doesn't look like such a bad piece of legislation. The overall theme seems to be some deregulation on EU side (as generally EU is the over-regulated side) and bringing regulatory standards closer together. The IP protections are the most concerning part so far IMO?

I don't know much about that kind of negotiations, the secrecy might as well be the right strategy to push it through I guess?

<comment><USER27> The most alarming features of this proposed legislation are the facts that it contains this:

".. it also contains an 'investor protection' provision allowing corporations to effectively sue governments for taking action to harm their business."

(source: [http://www.publicfinanceinternational.org/news/2016/02/ttip-...](http://www.publicfinanceinternational.org/news/2016/02/ttip- big-business-could-sue-governments-over-tax-profits))

So .. effectively, this could mean that a corporation could overrule a government in legislation if it would be harming it's profits.

The big problem with this for example here in Finland is that through these measure big corporations could try to take over the nations natural resources, like water and forest, which are and should be protected by local laws. But through this kind of legal means, these corporations could be allowed to sue the government over the loss of a profit due to protecting legislation, in order just to make a profit out of it. Which is complete and total bullshit.

<comment><USER28> My biggest issue with the TTIP; thanks for calling it out.

<comment><USER18> And if someone thinks this is a virtual threat, google for "Philip Morris vs. (Australia|Uruguay)" (countries being sued for anti-tobacco regulations hurting business of PM)

<comment><USER29> That's a frivolous suit. They are grasping at straws.

[http://theconversation.com/big-tobacco-vs-australia- philip-m...](http://theconversation.com/big-tobacco-vs-australia-philip- morris-scores-an-own-goal-4967)

Yes, it's a virtual threat.

<comment><USER9> Unfortunately, that doesn't seem to be entirely clear. The case you refer to in Australia was apparently thrown out because of some dubious changes to the company ownership arrangements that appeared to have been made just for the purposes of bringing a lawsuit, when the change in cigarette packaging rules was already public knowledge by that time.

[http://www.theguardian.com/australia- news/2015/dec/18/austra...](http://www.theguardian.com/australia- news/2015/dec/18/australia-wins-international-legal-battle-with-philip-morris- over-plain-packaging)

<comment><USER29> Yes, they played an empty hand, and when their bluff was called they promptly lost.</comment></comment></comment></comment></comment></comment></comment>


Google Doesn't Want What's Best for Us - <AUTHOR> https://www.nytimes.com/2017/08/12/opinion/sunday/google-tech-diversity-memo.html?ribbon-ad-idx=6&src=trending&module=Ribbon&version=origin&region=Header&action=click&contentCollection=Trending&pgtype=article&pagewanted=all <comment><USER2> "Without realizing the implications, a handful of tech leaders at Google and Facebook have built the most pervasive, centralized systems for steering human attention that has ever existed, while enabling skilled actors (addictive apps, bots, foreign governments) to hijack our attention for manipulative ends."

Couldn't agree more......</comment>