A simple makefile is a unicorn - <AUTHOR> http://nibblestew.blogspot.com/2017/12/a-simple-makefile-is-unicorn.html <comment><USER2> The Makefile shown in the article is simultaneously not complicated and also over-complicated. I feel like most Make users don't understand Make very well (especially the ones that complain really loudly about it).

Here's a couple examples:

1\. The "%.o: %.c" line is a huge code smell for Makefiles. You shouldn't ever write that line—it's built in!

2\. Mentioning .h files in the Makefile. Don't. Go look up the `-MMD` flag in your C compiler. Clang, gcc and many other C compilers support it. Add that and a "-include *.d" line in the Makefile and you'll have great dependency support.

Everything else in that makefile is just setting variables. It's made overly complicated by the directory junk, but I'm failing to see the problem.

<comment><USER3> > I feel like most Make users don't understand Make very well (especially the > ones that complain really loudly about it).

But the question is whether this is Make's fault for being incomprehensible, or the User's fault for being lazy.

The thing is virtually _any_ system or tool can be understood with enough practice, but just because there is someone out there who can use it well does not mean it's not poorly designed.

Both C and Make are decades-old technologies, but most people can read a C file without much experience and intuitively understand what is going on. The same is not true for Makefiles.

<comment><USER4> > Both C and Make are decades-old technologies, but most people can read a C > file without much experience and intuitively understand what is going on.

While they might think they know what's going on, I'm not convinced they actually do. C can be an incredibly subtle language to get right...

[http://blog.llvm.org/2011/05/what-every-c-programmer- should-...](http://blog.llvm.org/2011/05/what-every-c-programmer-should- know.html)

Regarding make, the thing to realize there is that it's just a DSL for specifying a dependency graph (and the way for satisfying dependencies). It's not a hard concept, but unless you come to the field with a bit of computer science background, it's not likely something you've been directly exposed to at the level required to understand make. But I don't know that this means make's choice of abstraction is necessarily a bad thing for its intended use cases. I also think this tends to put the lie to the notion that the difficulty is mainly around tabs... tabs may obscure the details, but switching to a clearer syntax won't solve the more fundamental gaps in understanding the mechanics of make.

I'll also argue that this is a potential problem with DSL's in general... because DSL's often don't use traditional imperative language semantics, there's always a bit of a learning curve that needs to be ascended. However, for make at least, there are a useful debugging tools to help understand what it's actually doing.

For me, at least, 'make -n' is great in that it instructs make to resolve the dependency graph based on the current state, and then just print the commands it'll run without executing them. If you know what the commands do, and know what needs to run, this can be a huge help understanding what's going on. (And there are other more powerful debugging capabilities as well for dumping variables, etc.)

<comment><USER5> DSLs are most suited to constrained execution spaces - where you know that there are relatively hard limits on what it is that the resultant program will have to do. The problem is that build systems are not really a constrained execution space - there's too often a _lot_ more required than just specifying a dependency tree and just saying 'make it happen'.

As with many 'simplified' DSLs that are often unsuited to the task at hand (e.g. C++ templating), make (or versions of it, anyway), evolved to accommodate these use cases and then morphed into something that accidentally became turing complete: [https://stackoverflow.com/questions/3480950/are- makefiles-tu...](https://stackoverflow.com/questions/3480950/are-makefiles- turing-complete)

<comment><USER4> > As with many 'simplified' DSLs that are often unsuited to the task at hand > (e.g. C++ templating)

Isn't a C++ template the exact opposite of 'Domain Specific'?

</comment></comment></comment></comment></comment><comment><USER6> I use makefile to build my javascript and css. It works brilliantly. I initially used Gulp, but started running into problems when there were build errors that would crash Gulp so I had to use a plugin called Gulp-plumber just to keep the watcher going. Then when I started having a somewhat more complex chain of dependencies I didn't enjoy having to manually specify the build order. The final nail in the coffin for Gulp is when I wanted to dynamically alter flags based on certain conditions, whether it was a debug or prod build for example, it just started getting messier and messier.

I am completely satisfied with Make as a replacement. Took me a couple days of hacking to figure out how to set it up and it's been problem-free ever since.

By far, my favourite aspect is that I no longer need to depend on flimsy gulp- specific wrappers. I just call my build tools natively.

<comment><USER7> I used Make for my javascript for a while, but having to update the makefile everytime dependencies changed got annoying. Now I just `webpack --watch`; the startup time isn't great, but it's a one-time cost and the recompile happens faster than I can switch to the browser.

<comment><USER6> I write my makefile once at the beginning of a project and never touch it again. If you need to update yours with every new dependency, you might have your makefile set up sub-optimally. I make sure to have something like the following to include all my js/css dependencies.

        JS  = $(shell find . -name "*.js" -o -name "*.json")
        CSS = $(shell find . -name "*.scss" -o -name "*.css")

I use a small program called watch [https://github.com/tj/watch](https://github.com/tj/watch) written by TJ Holowaychuck (the inventor of the Express framework) which automatically re- runs my makefile every second. As make is smart enough look for modified files and rebuild only what is necessary, it works quite well.

<comment><USER7> I'm writing for the browser so imports have to be bundled into the final product; I'm not seeing how that will rebuild a.js (depends on b.js) when b.js changes.

<comment><USER6> You could do something as follows assuming all source files are in src/, your entry point is src/a.js and your output is build/scripts.js. I use browserify for my compilation but this would work similarly with webpack.

       JS_FILES = $(shell find ./src -name "*.js")
       JS_ENTRY = ./src/a.js
       JS_OUT   = ./build/scripts.js

       $(JS_OUT): $(JS_FILES)
           browserify $(JS_ENTRY) > $(JS_OUT)

Now anytime any js files within the src/ directory are modified, make will rebuild scripts.js

</comment></comment></comment></comment></comment><comment><USER8> Meh. The author uses a silly example of Makefiles. People get the wrong idea about make. They think it's a program for compiling things; it's not, it's a very early, slim, clean version of chef or ansible. Personally I only got to know how cool make really is when I started to use it for stuff other than compilation, like file transfers or service run control (at one point my toy distro's rc system was "/bin/make -f /etc/rc.mk", where /bin/make was a static version.)

Even for the example he uses, since he seems to be on GNU Make, it's a pretty perfect case to use Guile integration to handle that metaprogramming he's trying to do by hand.

<comment><USER9> Early yes, slim no, clean debatable.

I certainly think whatever incarnation of make that you would summon to do some sort of multi-machine configuration management (per your chef/ansible comparison) is something I would do everything in my power to avoid.

<comment><USER10> Love me some make -- here is a session:

      : fred@dejah ~ $; cat >hello.c
      #include <stdio.h>
      int main() {printf("hello\n"); return 0;}
      ^D
      : fred@dejah ~ $; make hello
      gcc     hello.c   -o hello
      : fred@dejah ~ $;

How about that? make with no Makefile. The unicorn doesn't even exist. Which is as clean as it can get. make only resolves dependencies. Which is as slim as it can get. Early we agree on.

<comment><USER9> I've programmed in the early heyday when Make was my ONLY option and I'm primarily a C++ developer. These days? No thanks. I don't want to return to that hell. Any technology is "slim" if you cherry-pick just one feature. By any reasonable definition, make is filled with warts and all sorts of tricks that are REQUIRED for any non-trivial project that supports multiple platforms to work. It is old crufty technology and I'll take my chances with other options thanks.

You're free to love make all you want, but I've been there, was effectively held hostage by it for lack of better options, and hate it. Automake and asociated tools was the first attempt at getting us out of that hell, and it didn't succeed but cmake/premake/bazel are doing a whole lot better.

</comment></comment></comment></comment><comment><USER11> The author presents some non-trivial makefiles meant for C/C++ as proof that there are no simple makefiles. That's a bit disingenuous.

I think the problem here is the complexity of C, C++ and the building of such, not the makefile itself. Make can make simple things simple, but it can't take away genuine, real complexity as if it never existed.

I have lots of makefiles I use and am super-happy with. But none of them are for C-based projects. When you take away the complexity that C/C++ brings, you no longer need to bring that along to your makefile.

And you know what you have then? Apparently what the author refers to as a "unicorn": A nice and super-simple makefile. The unicorn is suddenly real.

<comment><USER12> Make sense. Then, it is because of the complexity we want to use the makefile. The include files is a mess for c/c++ because it poses no restrictions and people do abuse it. In my practice, I never put header files in the makefile. They are either stable or I need deliberately ponder on its design. When necessary, I simply touch the c source to trigger rebuild. So my makefile remain simple and I always need know roughly how my header files are used, which is a necessary responsibility.

</comment></comment><comment><USER13> I agree with the author - for C/C++ projects. The module system in C and C++ is pushed out of the compiler and into the build tool. This means make (which is simple) is insufficient to easily correctly implement the logic to build C/C++ projects of more than a few files.

However, a lot of other commenters in this thread have mentioned using make to manage their JS builds. JS build tools tend to work on whole directories of files together, and as such its fairly easy to compose these tools without a lot of logic in the build tool, and here make excells because its ubiquitous and simple. We use a makefile for building crystal and its simple and works great.

Make isnt useless, its just useless in the world it was created in.

<comment><USER14> Then why does your Linux/BSD/Unix operating system use it, including every piece of software installed on it?

<comment><USER15> > Then why does your Linux/BSD/Unix operating system use it

Because many old programmers don't want to change their habit.

> including every piece of software installed on it?

Look up ninja.

<comment><USER16> That's right, I don't want to change something powerful which works really well because someone finds it hard to understand (lacking the prerequisite knowledge) or even worse, wants instant gratification and isn't willing to master it. That's like wanting to design a CPU accelerator without wanting to learn how to design electrical circuits. Of course I'm going to say no!, I don't want to change the tool! If learning this stuff is too hard or not interesting to one, then one ought to consider doing something else for a living.

We have tools like Maven and Ant and Scons and CMake because someone didn't get Make and shell but they thought they did. Now I'm stuck with toy build tools which use unnecessary dependencies (like Java and .NET and Python) and only do as much as their programmer could imagine, limited by that programmer's imagination (and experience). You bet your patootie I'm going to say NO! I don't want to be stuck with a toy, someone's misunderstanding of Make.

</comment></comment></comment></comment><comment><USER17> There are any number of technologies that I've seen described as "simple" that I'm inexperienced in...and they look overly complex to me. When I learn to use them, they don't.

I've used make for a long time. I've never considered it difficult to learn or use. It has a limited number of things that it does for you, and leaves the rest _to_ you. I like that paradigm a lot more than systems that seem to operate magically.

</comment><comment><USER18> I think the simplest makefile is not to create one.

      echo 'int main(){}' > a.c && make a

_The only winning move is not to play. How about a nice game of chess?_

</comment><comment><USER19> If you're interested in build systems, you may find djb's redo concept interesting, as implemented in [https://github.com/apenwarr/redo/](https://github.com/apenwarr/redo/) for example.

</comment><comment><USER5> The more build scripts I write the more convinced I become that an ideal build system needs to be:

* Using declarative code as much as possible but still written in a good _general purpose_ turing complete language (maybe python - _not_ make).

* Built upon a foundation of well designed libraries, installable from a package manager that abstract common build workflows.

Make meets neither of these standards.

<comment><USER20> Sounds like you may want something like Scons with better support for common build patterns.

<comment><USER5> Something more along those lines, yes, although I'm really not that convinced about some of their design decisions and though the documentation is at least very detailed, it's rather obtuse.

I think it's possible to do better.

</comment></comment></comment><comment><USER21> I'd be inclined to agree if the author offered some alternative. Grunt is mentioned in the comments of course, but I have no experience with that.

In a simple C project packaged for Linux, FreeBSD anc Mac OS I seriously think a simple Makefile is possible.

And will continue to think that until I see an alternative that is easy to get going with on those systems.

<comment><USER22> For a simple project cmake is also very easy to write. Much easier than plain make IMO, as you have only a single layer of abstraction (cmake).

<comment><USER23> and when using cmake it will also work for android, windows, haiku, etc

</comment></comment></comment><comment><USER24> When seeing "simple" as an absolute measure, the author surely has a point. As for a relative measure - I think the argument is unjust, as you can easily come across much more complex makefiles. So my take on this is this: explain the width of the scale you're using when you measure in terms relative to it.

</comment><comment><USER25> The example Makefile in this article is contrived, here's an example of a simple Makefile: [https://git.suckless.org/dmenu/tree/Makefile](https://git.suckless.org/dmenu/tree/Makefile). I can find plenty of other such examples.

</comment><comment><USER7> Make is good at traversing and resolving a dependency graph; the problem is that we are forced to write said dependency graph. It's no hardship for small projects, but as projects grow and the dependency graph becomes annoying and/or difficult to manage by hand, we turn to automatic solutions -- and we should. Except that pattern substitution doesn't cut it, we really need a way to programmatically generate dependencies given a source file.

<comment><USER26> Fortunately, compiler writers have noticed this problem, and C/C++ compilers will spit out makefile snippets which define the dependencies for a given file. See the sample makefile above by danaliv.

<comment><USER27> They are, however, insufficient for the whole task.

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

</comment></comment></comment><comment><USER28> Yeah, let's better create another abstraction layer and release several frameworks each year to make things simpler. /s

Make has its use. It's a great tool for building small/medium projects that don't have many dependencies. You can setup a new project in minutes with nothing more than a text editor and compiler. If you know *sh scripting, it's not really complicated. For bigger projects I prefer Bitbake to avoid "dependency hell".

</comment><comment><USER29> I think the author would get a heart attack immediately if he heard about [https://github.com/ninenines/erlang.mk](https://github.com/ninenines/erlang.mk) ... :)

<comment> maze-le I for one find erlang.mk abhorrent as well. I usually write my own makefiles (~ less than 20 lines) to utilize eunit, edoc and rebar3.

<comment><USER30> My own makefiles are less than 20 lines, too, but they use erlang.mk instead of rebar3.

You don't get to claim simplicity if you use rebar.

<comment> maze-le >> You don't get to claim simplicity if you use rebar.

Yea, thats true. But good to see that I am not the only one who creates simplified makefiles to utilize other build tools.

My critique on erlang.mk is, that its far simpler to remember the 10-20ish commands of the rebar toolchain than thousands (or hundreds, but that it what it feels like) of erlang.mk options for every erlang tool that has ever been invented.

<comment><USER30> The reverse is also true: it's far simpler to remember the 10-20ish options of the erlang.mk plugins you use than hundreds options of various rebar plugins.

There is no significant difference between the two.

</comment></comment></comment></comment></comment><comment><USER31> This is simple vs magic.

Makefiles are simple in that you can see every directive and very little is hidden from you. There is no magic - just dependency ordering using mtime as a very simple heuristic.

<comment><USER32> Except that there is a lot of magic [1] and it does cause bugs. For example the implicit `%: %.o` rule has to be cancelled if you have a rule like `$(SPECIFIC_OBJ_FILES): %.c.o: %.c`

[1]: [https://www.gnu.org/software/make/manual/html_node/Catalogue...](https://www.gnu.org/software/make/manual/html_node/Catalogue- of-Rules.html#Catalogue-of-Rules)

<comment><USER33> I like to put `MAKEFLAGS += --no-builtin-rules` near the top of my makefiles. This way, all predefined rules are cancelled and I won't be caught off guard by a rule that I didn't specify explicitly being a match.

I also usually put `.SUFFIXES:`, but I guess that's redundant: "The `-r` or `--no-builtin-rules` flag causes the default list of suffixes to be empty." [1]

[1]: [https://www.gnu.org/software/make/manual/make.html#Suffix- Ru...](https://www.gnu.org/software/make/manual/make.html#Suffix-Rules)

</comment></comment></comment><comment><USER34> Make shares a fundamental property with C and C++: they are not meant to be simple; they are meant to be powerful!

In the purest Unix tradition, Make was designed to be tool-agnostic: you can choose which editor to code in, which (if any) preprocessor to use, which compiler and which linker to invoke and with which arguments, and what else to do aside.

And, all of this is controlled by a bunch of text files, which means grep and sed are your friends when you want to change a linker option for several projects.

Make comes from a philosophy which is the opposite of the IDE's ground. Not that the IDE concept is wrong per se, but if you are only used to have the same monolithic behemoth from code typing to binary output, your critics of make sound the same as an industrial fast food cook complaining that artisan patisserie is too complex.

</comment><comment><USER35> Is this not a simple Makefile?

[https://github.com/apex/apex/blob/master/Makefile](https://github.com/apex/apex/blob/master/Makefile)

<comment><USER36> I wouldn't expect `make clean` to delete stuff it didn't create itself. This does though as it just executes `git clean -f`!

</comment></comment><comment><USER37> People in this thread might be able to offer me advice on a project I have open.

I know C but am not experienced working on large C codebases. Below I will describe its rough build structure. I hope for strong tool or re-framing advice.

I have an existing python codebase. I want to make it easy to create native- code plugins. The method I have worked out: I compile shared-libraries. Python then calls into these via python-ctypes.

Each plugin is a directory project/ext/plugin,

* Python code: __init__.py and ext.py

* C code, api.c

* A rough build script, build.py. This accesses global config (e.g. path information) held outside this directory. It compiles api.c into a .so or .dll. It does this by generating a shell script or batch file, and then shelling out to it.

A python script in the root directory walks through this structure and forks a process for each plugin build.py. It is multiplatform (currently linux gcc and windows mingw32). So I have if statements saying "if windows, generate this big string, otherwise generate that big string."

The shared-object is compiled to a separate directory, res/ext/plugin. I did this to create separation between my source and build artifacts separate. (Is this sensible?)

This naive build structure was easy to create, and allowed me to spend my focus elsewhere while I was bootstrapping. Now that is done, I am interested in how I could improve the build so that it could scale to a large number of plugins.

Would I be well-served to use Make or Cmake or something else? Can they access configuration from outside of their own directory? Maybe I should communicate configuration via environment variables?

<comment><USER38> It sounds like your build process is not well designed. Why would a build script need to generate a shell script to call? And why would a python script fork a process for each plugin?

I think waf, which I've plugged before, would be a good choice for your project. Without knowing the details, your build script would look something like:

        def configure(ctx):
            # Load C compiler support
            ctx.load('compiler_c compiler_cxx')
            if ctx.env.DEST_OS == 'win32':
                # Special thing for Windows
        def build(ctx):
            for plugin in ['a', 'b', ...]:
                ctx.shlib(source=ctx.path.ant_glob('ext/'+plugin+'/*.c'), target=plugin)

You get cross-platform support for free. The code will create an 'a.dll' on Windows, 'a.so' on Linux and something else on OS X. Note that while the build function above looks like imperative code, it actually is not. Instead it is Python code to create a dependency graph which waf rebuilds for you when it is needed.

</comment></comment><comment><USER16> If the author of the article believes that the example Makefile isn't simple, he needs to learn Make, for that example is TRIVIAL.

Learn UNIX tools people, they're excellent tools developed by masters with the amount of knowledge, experience and insight very few of you will ever amass (don't think "ah! But I'm better!" for that way lie pain, misery and a build process of nightmares), and they work the way they do for multiple reasons. When it comes to build engines, Make is the real deal: sufficiently simple to get started right away, infinitely flexible to do whatever one needs when it comes to automated / intelligent building, with lots of useful built-in rules "out of the box". In this case the problem isn't in the tool, but in one's own capabilities as a programmer.

</comment><comment><USER39> Lol, I just made the argument that 'a simple makefile can do most of what people use grunt for' on Twitter like 6 days ago. Worth nothing however everything in our makefile is a PHONY which makes things a ton simpler, though arguably we're not using make to it's full potential.

<comment><USER40> You may want to consider using 'stamp files'. These are just empty files created via 'touch' to serve as a timestamp that Make can use to determine if a target needs to be rebuilt if the target doesn't correspond to an actual file in the build directory. This is useful for build targets such as running docker-compose build.

See [https://www.technovelty.org/tips/the-stamp-idiom-with- make.h...](https://www.technovelty.org/tips/the-stamp-idiom-with-make.html)

<comment><USER41> I have to disagree with this, I consider stamp files a Makefile anti-pattern.

Stamp files are an often an indication that someone is trying to turn a Makefile into a shell script.

Rules should be generated that generate a target from its dependencies. The intermediate steps should be encapsulated as the rule commands.

<comment><USER42> Sometimes it is necessary though. I have had to use this pattern in 2 scenarios:

Building a static website where the targets are wildly different from the source files. I could probably make it explicit but it will be overly verbose and brittle.

Check for and remove trailing whitespace. Because the dependency is actually the target, a stamp file is necessary.

<comment><USER43> Specifically in the second case: How do you get the timestamp on these stamp files to update, or do you just do it manually? And if you are doing it manually, why not just run a shell script instead?

<comment><USER42> The timestamp on the source files is updated by sed, when it strips the whitespace. The stamp file is then updated with touch. The advantage of using Make is that only modified files will be fed to sed and, consequently, only they will be caught by the rsync command, that I use to push the code out to the server(s).

</comment></comment></comment></comment></comment></comment><comment><USER44> Here's my "simple" makefile for C. It's for building a simple executable and a static library. I don't use Make for more complex projects.

It has a bunch of extra features, like coverage and profiling and tags files. They are pretty easy to remove if you don't want them.

If you want to put object files to another directory, it's much better to run make in the output directory than to hack your Makefile to output objects to another directory. Make can look for source files elsewhere but not search for object files outside of $PWD.

[https://github.com/rikusalminen/makefile- for-c](https://github.com/rikusalminen/makefile-for-c)

</comment><comment><USER38> If you are fed up with make, like I was, then just use WAF. It is an amazing build tool. Arguing with make fanatics is a waste of time. They are set in their ways and unwilling to accept that make is crap.

<comment><USER45> Problem is, you're forced to use it if the project devs are using it.

</comment></comment><comment><USER46> My Makefiles usually have one line per directive, can I still call my Makefiles simple?

I mainly use them to replace scripts to run tests/linters/formatters/containers/etc

</comment><comment><USER47> Well, while I agree that it is nearly impossible to write a useful Makefile for a more than minimal C project, I found that if you are willing to structure your project according to the best practices of CMake you can write fairly simple and _useful_ CMake file.

But be aware, that as soon as you want to structure your project in any other way than it is the CMake default you are starting to write your own Makefile again ;-)

</comment><comment><USER48> Can't upvote this enough; I to create a Makefile for my app ([https://zenaud.io](https://zenaud.io)) and came to the exact same conclusion. Once you're using the -MD clang option to generate makefile directives for include dependencies, your Makefile is no longer simple -- in fact it starts looking horrible. It's best to avoid IMHO.

</comment><comment><USER49> Gosh, programming is hard! Complaining about the syntax of make, or that it's possible to write bad makefiles (and using bad examples to boot) is not, in and of itself, convincing. Almost the same text could be used to complain about C++, Java, HTML, Chinese, or any other subject.

And doesn't work with visual studio??? Whose problem is that (hint: not make's).

</comment><comment><USER50> Compiling projects is inherently complicated, so the solution must also be complicated. You can solve the problem on a spectrum of easy but lack of configurability, or complex/verbose but very flexible. Make is the latter.

The author has shown that he does not understand the Make language very well since half of his final bullet points are wrong.

</comment><comment><USER51> In the C++ space modules would have been an option to clean this up and enforce more of an project structure, which in turn would allow smart tools to rely on that. Unfortunately the C++ committee can't agree to anything outside a compilation unit to exist and the abstract machine it's built upon to be quite limited ...

</comment><comment><USER52> i find it always starts simple, and usually one maintainer; after a year, it's a nightmare of hack on hack on hack with three+ contributors each knowing a slice. makefiles on projects that are active for two+ years, a year+ later might as well be chinese. (if it was chinese i could at least ask someone fluent to translate.)

</comment><comment><USER53> gnumake is a scripting language based on rules. It is not a simple language (bash is not simple either), but it allows to write simple scripts that work fine to perform simple tasks. It works reasonably well for project compilation which is not a so simple task. It becomes a excessively complex when it tries to become overly generic. On one of my projects, gnumake handles double compilation of sources for shared and static libraries, compilation of test programs written in C++/java/Ada often using corba. It handles dependencies in the whole source tree and works perfectly fine. The single limitation I have encountered is the handling of spaces in file or directory names. It is very difficult in bash scripts. It is almost impossible in complex makefiles.

</comment><comment><USER54> Isn't the main problem with build tools that no one spends much time learning them? You set them up, they work, then forget about them. Skip forward six months and waste hours on SO figuring out how your build works.

<comment><USER55> I think that means, the cognitive complexity is not in scale with the business requirements. If I had a service I needed to set up once and maybe update a couple of times a year, but took multiple days to sucessfully update, I'd spend some effort on making iteasier to make changes (either by better understanding, simplifying the system, or rewriting it to remove overhead).

</comment></comment><comment><USER56> Just use cmake or scons. In 2018, you should not hand write a single makefile !

A simple cmake/sconcs build file will be as simple as the one shown (or even simpler !) and it will definitively will be easier to integrate external dependencies if you have to.

<comment><USER57> CMake has to be one of the worst documented projects I've come across.

</comment></comment><comment><USER58> I can't stand when people use a makefile for JavaScript projects. I mean, here we have this beautiful cross-platform engine and then you go and ruin it with your shitty non-cross-platform makefile. Yuck!

</comment><comment><USER59> the only bad sin I've seen with makefiles is when organizations distribute complex ones that every project must use.

make should be simple, custom, and predictable for each piece of a project. I sometimes have a file for each dir. having a central invisible one is awful.

</comment><comment><USER60> Based on the headline, I expected this to be a rant about unicorn valuations. Was very pleasantly surprised!</comment>


Ask HN: What are some of the best-looking 404 pages? - <AUTHOR>

<comment><USER2> I really like HN's [https://news.ycombinator.com/not-a-real- page](https://news.ycombinator.com/not-a-real-page)

</comment><comment><USER3> This was mentioned in the _What is Code?_ threads and really stuck with me:

[http://www.bloomberg.com/404](http://www.bloomberg.com/404)

I was listening to the .NET rocks podcast today and the guest asked: Why do all 404 pages say 404? Users don't need to know the HTTP status code. I think it's a great point. It does not seem user friendly.

</comment><comment><USER4> My favourite one is this one: [https://www.coverfox.com/404/](https://www.coverfox.com/404/) It was mentioned on HN some weeks ago ([https://news.ycombinator.com/item?id=9811077](https://news.ycombinator.com/item?id=9811077)).

</comment><comment><USER5> Maybe not the best looking, but definitely a classic: [https://github.com/404](https://github.com/404)</comment>


Europe's largest 3D-printer prints an entire two-story house - <AUTHOR> https://www.designboom.com/architecture/kamp-c-3d-prints-two-story-house-08-17-2020/ <comment><USER2> Saw this story yesterday, and am intrigued... the article mentions "fibers" in the concrete and "the printing technique" that help with compression strength. Are there any more technical details available that explain how that's achieved, and how this technology stands up against building codes?</comment>


Show HN: We made T Combinator, in case YC reject us today - <AUTHOR> https://twitter.com/t_combinator <comment><USER2> I like this (even if no-one else will comment).

You'll need a way to require re-tweets within 15 seconds, though, as with iPaulGraham...

<comment><AUTHOR> Haha thanks - yeah, tweet in 15 seconds or it fails you. iPaulGraham is awesome.

</comment></comment><comment><USER3> Well that escalated quickly:

[https://twitter.com/matthewkremer/status/586623677673906176](https://twitter.com/matthewkremer/status/586623677673906176)

</comment><comment><USER4> What is the company that you applied to YC with?</comment>


50 SWAT officers bombard, destroy bystander's house with bombs - <AUTHOR> http://reason.com/archives/2017/11/19/the-cops-were-chasing-a-shopli <comment><USER2> After 19 hours trying to extract and arrest a fleeing suspect who had attempted to hide in the house, "the house was condemned by the local municipality immediately after the raid" and the city "refused to pay fair market value".

Part of the city's defense in the subsequent suit is that: "the city wants the courts to reject the Takings Clause claim, arguing that the language only applies to "those whose property has been taken for public use". "

So, law enforcement takes and uses the home's structure in an attempt to arrest someone, destroying it in the process, then the city claims that they didn't "take" the property in the first place. Wow.

At least the home owner was not the victim of a SWAT raid initiated from a false report.

<comment><USER3> > At least the home owner was not the victim of a SWAT raid initiated from a > false report.

Yes, it would be a shame if some of these city leaders' houses were destroyed without compensation by the local police following false claims about intruders inside.

<comment><USER2> It would be a great shame if the home owner's suit for an equitable resolution were derailed by this sort of escalation - an escalation that would tend to benefit the city by helping their defense make its case.

</comment></comment></comment><comment><USER4> So to be clear : In the US the government (or its representatives) can damage your property, and then isn't paying for those damages without hassle for the owner ?

Besides that : Why does the police need to use this amount of force to apprehend someone with a gun ? Couldn't they just isolate the guy, and cordon off the area so he can't harm others and then just wait ? Unless there are hostages involved, or immediate danger to the public, it seems a more appropriate way is to de-escalate rather then escalate.

<comment><AUTHOR> The US military commonly calls in airstrikes that drop bombs that cost more than houses from aircraft that cost more than entire city blocks, just to kill a single person with a rifle on the side of a hill.

<comment><USER5> They routinely do this. On occasion it's a civilian on the receiving end of this ridiculously expensive exercise.

</comment></comment></comment><comment><USER6> Just as a point of reference, here in Germany, the police would have just left the suspect be. They already knew his name, and therefore his address, so they would have just filed a report and the prosecutors would have sent him a letter.

As an dual citizen that grew up in America, this is shocking to me, but it seems to work here in Germany. Of course, Germany has national address registration and doesn't the same level of gun ownership..

Just wanted to point out a different approach.

<comment><USER7> A guy with a semi-automatic pistol who had fired on officers, "it's ok, we have his name and address"

Glad I don't live in Germany.

<comment><USER8> .. it is also not true. They would siege the house. And wait for him to give up.

<comment><USER7> Also not true, here's an example from July 2016

Stuttgart siege: Two dead after '100 armed police storm hostage situation' at law firm

Five hour stand-off ends after special forces called in

[http://www.independent.co.uk/news/world/europe/stuttgart- hos...](http://www.independent.co.uk/news/world/europe/stuttgart-hostage- siege-armed-police-gunman-today-latest-news-germany-a7131186.html)

<comment><USER8> Yeah but this was a hostage situation.

We were talking about a situation, where a lone, armed fugitive has barricaded himself in some place.

And in this situation, there is no need at all for storming.

Turning off the water and wait outside, should be enough.

</comment></comment></comment></comment></comment><comment><USER9> This article just became my new reply to the question "if I have nothing to hide, why should I care about government overreach?".

</comment><comment><USER10> I'm not entirely clear on why this isn't a story about an insurance company suing the city. The author mentions that the city offered $5k to cover Lech's deductible, which implies the property was insured. Do homeowner's policies typically not cover this kind of scenario?

<comment><AUTHOR> It's not up to the homeowner to use his insurance to repair his house when the city did the damage.

<comment><USER10> I'm not sure why not. Seems like exactly the sort of unlikely event that I'd want my insurance to cover. Isn't the whole point of insurance that they make me whole, and use their ample legal department to pursue the responsible parties to recover those costs (if such parties exist, in this case the city)?

<comment><AUTHOR> Your insurance is there only to protect you, not to protect others that cause damages to you.

</comment></comment></comment></comment><comment><USER11> The case is Lech et al v. Jackson et al, 1:16-cv-01956

</comment><comment><USER12> SPECIAL Weapons and Tactics...</comment>


A friend of mine died and I didn't know because of algorithms - <AUTHOR> https://twitter.com/Hellchick/status/942863353403150336 <comment><USER2> > All because FB's algorithm presumably decided that he didn't post much, so > he didn't warrant enough attention in our feeds.

This is the oddest thing to me. I would imagine that people who post rarely should be given preferential treatment and have their post included more often than if the feed was just a chronological timeline.

<comment><USER3> Having interviewed people who worked at Facebook, I'm convinced that nobody there really understands how it works. (Or, at best, a very few people do.) There are just too many people running around trying relentlessly to improve micro-metrics by fractions of a percent for the system to have much in the way of intellectual coherence.

<comment><USER4> you may have seen it but there is a really scary Ted talk suggesting that it's possible Facebook is using deep learning techniques to optimize for engagement and they have no idea why it picks what it picks but it's possible making people choose sides and argue happens to be the best way to meet its goals

[https://m.youtube.com/watch?v=iFTWM7HV2UI](https://m.youtube.com/watch?v=iFTWM7HV2UI)

<comment><USER5> Wait, so theoretically, suppose that a deep learning algorithm figures out that if they bombard someone with tons of images of other people happy during an acutely sad event of their life that they can drive them to suicide, and that this causes a massive peak of engagement from all the people expressing sympathy on their wall, would it do so? Given the fact that facebook is engineered to be addictive and holds the dopamine button on so many people's brains, wouldn't this practically be manslaughter?

<comment><USER6> IANAL but based on my understanding, manslaughter generally includes some form of negligence (instead of premeditation like homicide) so until our laws and culture catch up to the power these developers/decision makers actually hold, it's unlikely that a jury would blame the developers (or that a judge would even be sympathetic to the argument). Our society has agreed long ago that drinking and driving is irresponsible so thats why drunk driving fatalities are often prosecuted as manslaughter but the same is not true of software engineers and their creations. We need a sweeping cultural change outside of software engineering just like we had with civil engineers in the 20th century.

Nowadays, a professional engineer (a phrase with a precise legal meaning) can be held criminally and civilly liable for negligence even when they are "just following irders." Unfortunately, we're at the very early wild wild west stages of the industry, before some big exposé or calamity completely shakes up the industry (i.e. Sinclair's _The Jungle_ did for food, Carson's _Silent Spring_ for pesticide use, or the 1906 SF earthquake for building codes).

<comment><USER5> If you build a machine that builds random types of robots but are negligent to make sure it doesn't create robots that kill people, isn't that still criminal negligence?

I think of these algorithms as being algorithms created and vetted out by algorithms, therefore, its negligent to not understand what they are doing. Since its difficult to know what they are doing, then the risk to use them in this way should be viewed as too great

<comment><USER7> It's the point of machine learning that no human needs (or often even can) understand how the machine is doing something as long as the target metric is optimized. We are building black boxes which translate input into desired output. And tomorrow we will have black boxes building other black boxes.

The only way to ensure nobody is killed is to add "0 people killed" to the target function of the black box.

<comment><USER8> Every heuristic algorithm needs a tollerance

        peopleKilled() < ε

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> The news feed is terrible. On Facebook or on Twitter. I don't like unfollowing people, but I have on occasion unfollowed people that post too often. For some reason, Facebook thinks I need to see all of these posts, and drowns out other stuff in my news feed. I've missed congratulating friends on getting married, having a kid, getting a degree or sending my condolences on the death of a loved one. It's terrible, that these people who post less often, but post only the bigger things in their lives get drowned out by Facebook's algorithms. I'd infact want it the other way around. The folks who post often should simply be treated as fillers.

Finally there's the bugs in facebook that randomly causes my feed to refresh. And on these refreshes, I'm shown an entirely new/different feed. Maybe Facebook thought they showed me a post, but the bug and auto page refreshes caused me to miss that certain post.

<comment><USER10> If I understand you correctly you're suggesting to simply hide someone else's posts. However wouldn't that potentially lead to the very same outcome, as in missing an important event? What if Facebook decided the marriage of your frequent poster friend was the one post that had to disappear?

<comment><USER11> Presumably the frequent poster will post several times about their important event, so at least one of these will get through the filter.

</comment></comment></comment><comment><USER12> A week or so ago Facebook removed the ticker feature they had in the bottom right corner. This is how I worked around the predetermined algorithm showing me what Facebook thinks I wanted to see. It allowed me to keep up with people I wanted to without Facebook intervening.

Now that it is gone, the value of Facebook to me is near zero. Even if I saw MOST RECENT, posts are missing. When I come back it's switched back to TOP STORIES.

I have no idea why companies decide to make users work hard for what they want.

<comment><USER13> Users? You're the product. Advertisers are the users.

<comment><USER14> More typically than in response to someone saying "user," I see this in response to somebody erroneously saying "customer" or similar. I think "the user" is pretty valid, but "the used" makes for a good smirk.

<comment><USER15> There's only two industries that describe their customers as users: Software and drug dealers.

</comment></comment></comment></comment><comment><USER16> _It seems like "a good friend is in serious health trouble" warrants top billing on any feed._

I have had a lot of online friends, though not through Facebook, which I mostly don't use. But I can agree with this logic. I would also be horrified to learn that an internet friend had died or had been hospitalized without me getting the memo, even though they posted about it.

I think this is a reasonable assertion, regardless of what people here think about whether or not this was a "real" friendship.

<comment><USER17> This is something that's been on my mind as well, and I think an issue to take seriously by those at the levers.

A friend recently took his life, and his FB account was deleted so I can't verify anything, but I can't help but wonder. Was there anything he had posted that I didn't see, that could have told someone (me) how he felt? It was loneliness apparently, and took all by surprise - how much did Facebook play a role in that? I'd do anything to have been there for him - I'd be devastated if an algorithm had prioritized my alt-right classmate's latest infowars share over a quiet plea for help because it generated more engagement.

<comment><USER16> If it is any comfort, people who are suicidal typically have pretty serious problems, often including brain wonkiness.

I am sometimes suicidal. I have extremely good support. My adult sons don't leave me alone when I am suicidal, because most suicides occur while alone, so simply having company is a deterrent.

But they also don't bother to try to reason with me because I am not rational at such times. There is no convincing me that my warped perception of my life is completely unrealistic. Rebutting my crazy statements with facts to the contrary makes zero difference.

I'm sorry for your loss. And I agree that this is something social media has an obligation to do better on.

<comment><USER17> I appreciate the kind words. Yes, it's certainly not social media's sole fault, and as others have said down thread, there have always been other ways of keeping in touch. I certainly don't blame Facebook for not showing me anything that may have been posted - more, they're in a position to do so much good for the world, and I hope they can do that instead of optimizing for clicks.

<comment><USER16> I meant you shouldn't blame yourself. It is a very hard problem to solve.

<comment><USER17> Very much agreed on all counts. Thank you

</comment></comment></comment></comment></comment></comment><comment><USER18> I've noticed I barely get any responses on Facebook anymore unless my posts have pictures. They recently added a feature where you can add a big color background to your textual posts. My guess is that they're pushing users towards creating big flashy posts so that ads can blend in better with the stuff from your friends.

The Facebook feed has become an awful way for communicating with friends.

<comment><USER19> I dunno about other people, but I almost completely ignore those big background posts. I think my brain sees them as adverts/spam and just filters them out.

<comment><USER20> That style of post is reminiscent of Myspace. I will read a long text post and immediately skip those vapid 1 sentence "glittery"posts

<comment><USER21> Today I have published a post on my Facebook page. It was my two book recommendations of the books I've read in 2017. The covers were added as images to a post, and there were four paragraphs of text, first one explaining what I'm doing, second and third one a really short reviews of the books, and the fourth one asking my followers to recommend books in the comments. Knowing that it won't reach anyone, I have also purchased an ad (3 euros, one day), targeting fans of the page and their friends.

Organically, it reached 149 people (smaller posts reach 3-5x as much on average). It reached 1,471 by a paid promotion. Number of people who liked, commented, or even clicked to see all four paragraphs is 45.

My point is: you're a minority. And people who post like that get punished _greatly_ by their algorithm. My ad was even postponed for like 30 minutes because images contained "too much text for an ad" until I clicked on "manual review" because I saw in their help pages that they let book covers slide.

<comment><USER20> My parent post was not referring to ads but short text posts with colorful backgrounds.

I have no issue with preview images and preview text even for ads. Although I wish Facebook accurately labeled them as ads

</comment></comment></comment></comment></comment><comment><USER22> I've had this experience a few times, when a friend has popped into mind and I looked them up only to find old posts eulogizing them. It adds an extra gut punch not being able to actually mourn with other people because you didn't find out in time.

The reality is that Facebook doesn't assume your Friends are your friends. It assumes you want to keep interacting with the same people you most recently interacted with. It also assumes you want to see things you're likely to Like or comment on. On the whole, this probably leads to them more reliably providing that dopamine hit when users check in, at the cost of being useful for actually staying in touch.

</comment><comment><USER23> I guess it's hard to run ads next to a post about a sick and dying friend.

<comment><USER24> "Flight deals to Portland!"

"Great hotel rates near the hospital! Act now!"

</comment></comment><comment><USER25> I doubt FB will change how their feed works because of this publicized incident. Perhaps Zuck will make a post about how they'll try and improve because they care about people.

I know a lot of people that work at Facebook and they're all highly intelligent. It's a great place to work at but incidents like this makes me question if their talent is all being put to good use.

The algorithm has definitely a lot more "machine" learning to do to prevent these incidents from happening again. Close friend, related to death and health, gofundme campaign all scream that the statuses should've been shown. (if FB can be so good at showing relevant ads, why can it show relevant feed)

</comment><comment><USER26> I've never missed someone I'd consider even a distant friend passing via FB -- a few acquaintances, though I usually found out within a week.

That said, I have experienced FB hiding something bad in someone's life for an extended period -- a relative I'm not directly linked to passing, cancer diagnosis, someone's dog getting very sick and having to be euthanized, etc. Again, I found out, but not fast enough, even with friends that were in the second ring out from my very closest friends.

</comment><comment><USER20> I have a question about Facebook, they seem to spend tremendous effort to create engagement. Arguably at the detriment to society.

Why are the ads so terribly targeted? They are an ad company with immense data collection and at the end of the day the ads are equivalent to a niche cable network

<comment><USER27> Because company [X] thinks the target for product [Y] is [Z].

That's my guess anyway. And I work in (and/or closely with) marketing.

.edit:

Come to think of it, I want to elaborate on that.

Think about search engine optimisation. It's in a similar vein. "A guy walks into a bar, bars, pub, tavern, pulic house, irish pub, drinks, beer, acolhol, bar stool" etc.

My point is; people that are trying to sell 1 thing, might focus on reaching AS MANY PEOPLE AS POSSIBLE, over focussing on getting the right (but smaller) audience.

<comment><USER20> That happened in the late 90's with online ads. It's just weird that Facebook is a juggernaut of data collection and hasn't been capable of doing anything new or better for targeting ads

<comment><USER27> Again, it's not Facebook. It's the companies using the platform.

Don't blame the tool. Blame the person wielding it.

<comment><USER20> So Facebook as an advertising company has not made a better tool?

</comment></comment></comment></comment></comment><comment><USER28> How does the OP know that she actually peruses FB for all of her new feed's content?

[https://twitter.com/Hellchick/status/942864030649036800](https://twitter.com/Hellchick/status/942864030649036800)

> _Now, I 'm a meticulous FB feed peruser. I always set it to Most Recent and > browse until I see the stuff I saw last time. I keep up._

Despite her claim here, it's possible that she missed her friend's post because her surveillance of her own feed is likely to be imperfect, especially if she has a non-trivial number of friends.

edit: I bring this up because, ostensibly, the whole point of FB's (or any social network's) "most important" algorithm is to mitigate the problem of how "most recent" can be too overwhelming to consume if you have a non-trivial number of friends. If OP has a lot of friends, such that there are a few dozen new items per day on her newsfeed, even if she were meticulously reading her feed, daily, there's no guarantee that she didn't miss the post because of imperfectly skimming them. That no one else in her social circle noticed isn't much proof since, as a mutual friend admits, they don't know how many of them are active on FB: [https://twitter.com/FRENDEN/status/942918637576441857](https://twitter.com/FRENDEN/status/942918637576441857)

That said, I swear I've seen FB's algorithm point out users who have posted for the first time in a long while. This kind of notification/signal presumably would not be part of a "Most Recent" timeline:

[https://www.quora.com/Why-am-I-getting-notifications-on- Face...](https://www.quora.com/Why-am-I-getting-notifications-on-Facebook- that-X-a-friend-has-posted-for-the-first-time-in-a-while)

<comment><USER29> On another slightly related note, has anyone else noticed that Facebook will reset the feed's sort setting to "Top Stories" no matter how many times it's set to "Most Recent"?

<comment><USER30> Even when I enable "Most Recent", it doesn't show every post from all of my friends. There are posts that show up on "Top Stories" that don't show up on "Most Recent."

How does that make sense?

<comment><USER29> I just tried changing the feed sorting order to "Most Recent" and found that it only displays 4 posts. One post from a page I follow, one advertisement whose sponsor was liked by one of my friends, one post that links an article from one of my friends, and a series of posts on a friend's wall for their birthday.

At the bottom, it says "there are no more posts to show right now." If I change the sorting order back to "Top Stories", it shows far more posts and the first four are in the same order as the ones shown in the other sorting order.

Given that, I don't have much incentive to use the "Most Recent" sorting order it seems.

</comment></comment></comment></comment><comment><USER31> So we've given our "Make sure my friends aren't dead" check to Facebook, and we're blaming Facebook? Isn't this our fault? Isn't the rational thing to take back the rights we've given to Facebook?

<comment><USER32> I am astounded that this comment is not receiving more upvotes and comments! I can't believe we are taking someone seriously for blaming Facebook for not telling them their friend has died. If you care about someone, call them, be present in their life every once in a while. Caring is a proactive act!

<comment><USER33> The key value proposition of facebook to me is that it makes those types of connections easier to scale up. Do I really need to call 200 people a month to see what they're up to and how they're doing? It's much better to have a constant feed of information that you can interact with as you can and want.

But it doesn't provide that value any more. It shows me ads and posts from a handle of the hundreds of people I'm friends with.

So you're right that caring is a proactive act, but that doesn't invalidate that initial value proposition at all.

</comment></comment></comment><comment><USER34> I wish these social media sites just gave me everything in reverse chronological order and allowed me to fine tune the results..

<comment><USER35> If Facebook did this, people would stop using it pretty fast!

<comment><USER36> I wouldn't say people would stop, people would stop engaging as much but I'd still find it useful. I most often use facebook with `?sk=h_chr` query string to give me the content in reverse chronological simply because that makes sense to me most.

</comment></comment></comment><comment><USER37> I would have thought a lower frequency of posting would be an indication of a greater weighting of the content when something was posted. Of course, as far as keeping eyeballs for a long time, that's not what keeps people on the feed. Maybe because those kind of posts are more likely to get people out of the feed and onto direct messaging instead? Rather than lots of stuff (reposts and shares) to scroll fast by and thus more space for ads to also scroll by.

<comment><USER38> That's a (self-admitted) assumption made by @Hellchick. The Facebook post in question could have been relegated off of feeds for a different reason.

<comment><USER28> What reason could that be? I thought maybe there was a way for a user to post something on their profile timeline that wouldn't show up in their newsfeed, but it appears that you can only do the _opposite_ , i.e. post something that is seen in the newsfeed but won't be attached to your profile timeline: [https://www.cnet.com/how-to/facebook-now-lets-you-post-to- th...](https://www.cnet.com/how-to/facebook-now-lets-you-post-to-the-news- feed-and-not-your-timeline/)

</comment></comment></comment><comment><USER39> Before any comment about "real friends" keeping in touch outside the social media, the second tweet:

>A friend I've known mostly online for 15+ years died this weekend. Our friendship started on an old gaming forum, but continued on Facebook.

<comment><USER40> So you can't have 'real friends' that you met online? Hell, guess my wife is imaginary then, met her in 2005 online.

<comment><USER41> I think GP was saying that this story can be seen as evidence that a real friendship does not need face to face interaction to be valid.

<comment><USER42> I think the evidence in this post suggests that a real friendship needs to go beyond some curated communication system where some one else (or some algorithm) decides what you hear from each other. Otherwise you may miss significant events in each other's lives.

<comment><USER43> > curated communication system

yes. curated is the keyword.

fb used to be a legitimate communication system - you could write on walls, you could poke, you could do a lot of stuff with fb apps that solicits an immediate response.

fb today is not the fb of 2007. I know a lot of users grew up with fb but fb did not grow up with us.

</comment></comment></comment></comment></comment><comment><USER44> Quick fix: don't rely on Facebook to be in touch with your friends.

<comment><USER45> Easier said than done.

<comment><USER44> To do it, you just have to try. Once you are off Facebook you are back to having a proactive experience towards friends instead of simply browsing feeds and clicking "Like!" icons.

</comment></comment></comment><comment><USER46> From all the reasons to claim that "the Internet is broken", I think the worst is that most services today apparently do one thing; but in reality do a different one. And if you want it to do what "is supposed to do", it is extremely laborious, or literally impossible.

The facebook feed is one example.

Recent changes in google search, another.

</comment><comment><USER47> I've always fantasized about people switching from FB to an easy-to-use RSS platform. Kinda like Mastodon, but bloggy/facebookey instead of a twitter clone, and obviously: chronological feeds.

I'm sorry for her loss.

</comment><comment><USER48> Before social media how long would it have taken to find out this loose of a connection had passed away? My guess is months to years if ever.

<comment><USER49> Before social media people religiously read the local obituaries column in the local newspaper and called their friends if someone they both knew had died.

Families would call all the close contacts and relatives to make sure that they knew.

For several years after my father died in 1985 people called our house to speak to him. Most were not close acquaintances but some were still pretty shocked to hear of his death.

<comment><USER50> > Families would call all the close contacts and relatives to make sure that > they knew.

I think people generally still do this? When my mother died a few years ago we took turns calling her relatives and close friends. We wanted them to hear the news verbally.

</comment></comment></comment><comment><USER51> As far as I can tell this is a side effect of optimizing the algorithm to encourage greater usage by discouraging limited usage. Asking FB, Twitter etc. to do any different is the same as asking them to make less money.

<comment><USER52> You'd think that FB would want to pull "wayward" people in, though. If I haven't posted in a while, and then suddenly post, FB should give that post wider reach, with the hope that I get a lot of engagement, come away with a positive feeling, and then post/engage more.

I just did a sort of impromptu 2.5 month posting hiatus from FB (which also included no commenting or liking), and when I returned I got a ton of likes and comments on my fist couple posts.

</comment></comment><comment><USER53> Why isn't there a setting that you can just choose to see everything in chronological order. That's fine if you want to default people to the algorithm feed. It's just such a simple thing to add.

</comment><comment><USER54> Sorry for your loss but... Wake up! Facebook doesn't owe you the prioritization of information flow you wish. It's like TV: you must watch tons of crap, commercials etc. and often you miss important information...

<comment><USER45> Maybe FB doesn't, but the newsfeed display has significantly changed over the years, that expectation based on initial experience aren't matched anymore to the current format. For a significant portion of the user base, this seems to be detrimental to the experience, and one might argue to the engagement sought after by this company.

</comment></comment><comment><USER55> Think of facebook like an organism subject to evolutionary pressures. The evolutionary pressures that matter to facebook are maintaining "engagement" and through that ad revenue. Note that what matters to FB isn't engagement between you and your friends, just between you and it. So it doesn't matter to them how poor the algorithm is. The only thing that matters is how many minutes or hours a day you spend on the site.

</comment><comment><USER56> A Facebook user who thinks Facebook is ment for keeping in touch?

I wonder how people can avoid noticing what Facebook has become after all this time and still use it.

</comment><comment><USER57> Today I got an email from a female friend of mine who passed away 4 years ago. Apparently they used her facebook info (email, display name) with the subject being 'Fwd for 'my facebook display name' followed by terrible spam .. Ohhhhh how I long for the days that we weren't hooked on social media.

</comment><comment><USER58> The irony is FB isn't a very good way for staying in touch with your friends, not when they suppress posts about the most important events going on in their lives. If that's the case then what's the point of social media? What function is actually being served?

<comment><USER59> Ads are being served and FB makes money from advertisers. It's good that some people are slowly starting to see that...

</comment></comment><comment><USER60> Blaming Facebook in this is really weird. You didn't know about it because you weren't really friends. You were acquainted, yes, but you didn't actually keep in touch. If it weren't for Facebook you'd never consider him a friend, just some guy you knew. I'm sorry this seems insesnsitive, but Facebook isn't reality, and it's a company trying to make money. It should be accountable for the damage it does for society, but it can't be accountable for the way we manage our friendships. That part is our responsibility as humans.

<comment><USER61> > If it weren't for Facebook you'd never consider him a friend, just some guy > you knew.

If you re-read the post, this is inaccurate. The friendship began elsewhere.

>Facebook isn't reality, and it's a company trying to make money

It is a company whose value proposition (to non advertisers) is its being reflective of or enhancing reality. This as opposed to, say, warcraft.

>it can't be accountable for the way we manage our friendships

Managing friendships is exactly facebook's purpose. If it claims to be the best way to manage a friendship, and bad things happen as a result of presumptions the company makes in the course of managing said friendship, it's sane to associate facebook's tooling around friendship management with the actual management of friendships.

If I sign up for facebook under the pretense of "see what happens to my friends", and then sort by recency, if recent things that happen to my friends do not appear, that is, IMO, a legitimate grievance.

Facebook might not owe this user anything, but that doesn't mean they can't wish for better service. A person missed the death of their friend because they were second guessed by an algorithm that has gradually torn control from the hands of users and downgraded reality and chronology to foster "engagement". That sucks.

<comment><USER62> There is this principle that I always bring up when it comes to our interaction with the government, but it fits perfectly here too.

You might be able to give up control over something, but never the responsibility that comes with it. So in this particular case, we are free to let the algorithm decide for us, but we should all be aware who will suffer when the algorithm goes haywire. It's that simple.

</comment></comment></comment><comment><USER63> I was quite un-cooly positive about Facebook for the first 15 years or so, but recently it has become extremely apparent that the algorithms are getting in the way of what I'm trying to do (communicate with a predictable set of friends).

</comment><comment><USER64> I had a similar experience a few years ago.

[https://righteousruminations.blogspot.jp/2015/06/hating- face...](https://righteousruminations.blogspot.jp/2015/06/hating- facebook.html)

</comment><comment><USER65> Advertisers don't want to put their ads next to a post about someone dying.

<comment><USER66> ^ this.

</comment></comment><comment><USER67> Utterly ridiculous. The feed cannot show every possible post, otherwise it would be a mess rather than a feed.

I really dislike Facebook, but blaming it in this case doesn't even make sense.

</comment><comment><USER68> This is in line with my Facebook experience. I only post every few weeks on FB, sometimes only every few months. And FB treats me as a second class citizen. My posts often don't even appear in the default feed of my friends.

They do appear when my friends switch to 'Most Recent'. But most recent is pretty much unbearable for friends with many friends because it shows every tiny thing like 'Mike is interested in an event' and stuff.

</comment><comment><USER69> One of many reasons you shouldn't depend on algorithms or facebook to keep you informed and aware of anything, let alone life and death issues. The unwillingness and/or inability for people to access, process and understand information is endemic in our society and one of the core reasons we are in such bad shape on so many levels.

</comment><comment><USER70> This post reeks of entitlement. The time the author spent writing this would have been better spent _actively_ cultivating another relationship than complaining that something didn't perfectly spoonfeed them life experiences.

</comment><comment><USER59> People shouldn't rely on these services for anything important. FB is primarily ad serving business and entertainment website. It doesn't make our life better, it also takes away our time and reduces productivity. :(

</comment><comment><USER71> Very sorry for her loss as well.. and her pain in not knowing...

It's interesting from a social science perspective to have the expectation of the system / algorithms that it would have notified you of a friend's passing. This is an expectation that the model understands what is important to the user - something I doubt the model is optimized around completely.

Before Facebook, I think not knowing would be even more common than we realize - unless you had frequent contact with your friend. In a world disconnected, no email, no Internet, maybe only a telephone, or even further back, a telegram, or even less - it might be many, many times much less likely you would find such a thing out. Going back to the times of villages with no electronic technology at all, communication would have been only through immediate knowledge, written / recorded information or word of mouth.

I used to work for a website that tried to digitize obituaries, to serve as a replacement for the newspaper, way before that was really a "thing". It never really took off, because, the people who wanted to publish death notices in newspapers just kept doing that. Most people who wanted to read them preferred holding a newspaper than reading a website (although, it did help disseminate information quickly). Eventually, newspapers simply published the obituaries and death notices online themselves, and it all went to a big aggregator of obituary postings (or got indexed by Google), and then it was no longer much of a thing.

The most interesting thing, for me, having worked in this area, was seeing how users have taken to Facebook as a sort of memorial to those who have passed, help spread the news, etc. But with the conflux of marketing and so much personal news... I'm not surprised that this information slipped through the cracks.

I recall a book on this topic - "Bowling Alone"[1] published in 2001, before social networks. The excerpt from Amazon.com -

"Once we bowled in leagues, usually after work—but no longer. This seemingly small phenomenon symbolizes a significant social change that Robert Putnam has identified in this brilliant volume, which The Economist hailed as 'a prodigious achievement.'

Drawing on vast new data that reveal Americans' changing behavior, Putnam shows how we have become increasingly disconnected from one another and how social structures—whether they be PTA, church, or political parties—have disintegrated. Until the publication of this groundbreaking work, no one had so deftly diagnosed the harm that these broken bonds have wreaked on our physical and civic health, nor had anyone exalted their fundamental power in creating a society that is happy, healthy, and safe.

Like defining works from the past, such as The Lonely Crowd and The Affluent Society, and like the works of C. Wright Mills and Betty Friedan, Putnam's Bowling Alone has identified a central crisis at the heart of our society and suggests what we can do."

Even with Facebook/social media, I wonder if the same thing is still true, or if we have begun to heal the broken bonds of our disconnected nature the book identified.

[1] ISBN-10: 0743203046

</comment><comment><USER72> I'm thinking about this as less of a newsfeed thing and more as pub/sub maybe being a bad model for keeping in touch with friends. Especially when it's curated pub/sub.

</comment><comment><USER73> I posted this article on Facebook and received 0 responses. My wife, who has me in "close friends" and on "show first" frequently misses my posts.

</comment><comment><USER74> Hopefully posts like these encourage us to reach out to our friends in actual real life way, not just through social media likes or mentions

</comment><comment><USER75> Algorithms can have their downside.

Sometimes I miss some important emails just because the emails are classified as spam and moved into spam folder.

<comment><USER59> That is not the same. You can always check the Spam folder. But you can't see posts which FB decided not to show you!

</comment></comment><comment><USER76> A little birdy told me you can see tweets chronologically in lists. I've yet to try it out though.

</comment><comment><USER77> One day FB will say AI has taken over the algorithms without anyone's notice!

</comment><comment><USER78> > All because FB's algorithm presumably decided that he didn't post much, so > he didn't warrant enough attention in our feeds.

All because you've given Facebook responsibility for keeping in touch.

One suggestion for keeping in control and in touch: a less algorithmic address list in email.

"Oh, but I don't want to manage that."

Well, how good is what you're using now working? Is that chance of someone outside the list serendipitously stumbling across a post really _that_ valuable?

And, sorry for her loss.

<comment><USER79> Look, I don't like Facebook. I reluctantly caved because there was too much going on there that I was missing, but I'd rather not be a participant.

But you're ignoring the fact that Facebook is effectively the first opportunity in history for a universal "push" mechanism for friendship.

If your best friend died, would you really know how to contact everyone he/she was friends with? You could dig through their Rolodex in the old days, which would cover some percentage but also pick up a lot of outdated contact information and business relationships with no friendship involved; you could send email to everyone you could find in their mailbox, but that surely wouldn't hit everyone; you could dial all phone numbers in their phone, but same problem.

And obituaries are pull-based, and tend to be localized.

FB, for better or worse, has the potential to be the most effective way in the history of mankind to tell everyone who knew someone that person has passed on.

<comment><USER80> > But you're ignoring the fact that Facebook is effectively the first > opportunity in history for a universal "push" mechanism for friendship.

Only because it has defined downwards the entire concept of friendship.

<comment><USER79> I don't disagree that it has redefined "friendship" in a negative way, but that's irrelevant.

How would all of your _genuine_ friends find out you've died, if they are widely dispersed and to various degrees ignorant of each other?

<comment><USER80> The same way they did before social media became a thing, presumably. More pertinent is how you can now have a what's considered a genuine friendship entirely by interacting with someone on fb.

</comment></comment></comment></comment></comment><comment><USER81> It's possible to create a Facebook client using the API and get a feed the way you want?

<comment><USER59> No, that's not practically possible. And even if it were, FB could stop or change/restrict it any time.

</comment></comment><comment><USER82> I would assume because they live in a third world country such as the United States.

<comment><USER83> Or perhaps a country with a national medical program?

[https://www.gofundme.com/StephenSykes](https://www.gofundme.com/StephenSykes)

"Unfortunatey, the cost of the drug is above the NHS funding threshold. It is not therefore available on prescription and the Consultants have told us that we will need to raise the funds required to purchase the treatment that Stephen needs to give him the real prospect of becoming well again."

<comment><USER84> Every healthcare system rationalizes spending. The US system lets low income people die because they can't afford something as basic as insulin. The NHS rationalizes on £90,000 recently-out-of-trial cancer treatments.

</comment></comment></comment><comment><USER85> There's another story buried in the Twitter conversation:

> Pretty sure this is what killed my friend @shanecomix by proxy. I and > numerous other friends of his never saw his GoFundMe campaign for insulin. > He died $50 shy of his goal. I'm very sorry for your loss, especially > complicated by such esoterica.

Why exactly does somebody need to start a GoFundMe campaign to raise money for life-critical medicine?

<comment><USER86> Probably because navigating the beurocratic landscape of any government assistance program requires levels of patience, assertiveness, and guile that anyone fully capable of utilizing the services will already have a job that will net enough that they don't need to use the program.

Having experienced such programs through others' experiences, I can say that they are very often staffed by underpaid, incompetent employees whom are trying to execute complex programs with perverse incentives designed by compromising committees. The people that need these programs the most are the least capable of dealing with these problems, but almost nobody knows or cares what their troubles are.

<comment><USER87> This may be true of US gov't bureaucracies, but isn't necessarily true of governments in general.

<comment><USER88> How do you structure + incentivize government orgs to prevent these sorts of issues?

<comment><USER89> > How do you structure + incentivize government orgs to prevent these sorts of > issues?

The basic problem comes from making things too complicated.

For example, there are a million programs that provide subsidies to the poor. The poor can't afford housing, so we have housing vouchers. The poor can't afford food, so we have food stamps. Heat, school, medicine, the list goes on.

The problem with all of these programs is that they're bureaucratic nightmares to navigate and cause all kinds of perverse incentives, e.g. inflating the price of school/medicine/housing, forcing people to buy a specific amount of the subsidized thing instead of spending some of the money on something they might need even more.

And the programs are all trying to do the exact same thing, which is to give money to the poor. Which we could instead do directly with a universal basic income and erase all of that unnecessary complexity from existence.

<comment><USER90> I'm not saying a universal basic income is good or bad, but notice the pivot you did there. You criticize programs that don't just spend all their money by giving it to the poor, then you say: "Which we could instead do directly with a universal basic income". That's a program which probably spends most of its money on something other than giving it to the poor, because lots of the money goes to people who aren't poor. Such a program could well have all kinds of perverse incentives too.

<comment><USER91> With the right tax structures, it would end up focusing on giving money to lower income individuals. You have an increased progressive taxation structure such that for upper-middle income people the UBI is a wash (IE, someone making $100,000 a year is getting and additional $12,000 from UBI but paying $12,000 more than they would have before).

The reason why UBI works well is because it's a cash handout (like the other person said, you're not specifying the needs of the individual), it's a universal and not means tested program (you don't have to go through a bureaucratic maze every time you become eligible), and it's instantaneous for people who have sudden changes in fortune (IE, the income stream is already set up).

</comment></comment></comment></comment></comment></comment></comment><comment><USER92> TL,DR: A Facebook user died and his online friends were not notified because he did not post much so Facebook presumably assumed it was not worth notifying them.

</comment><comment><USER93> This was not the failure of an algorithm. This was the failure of a person to keep in touch with an individual they wanted to call a friend, but couldn't be bothered to occasionally reach out to.

Facebook enables this sort of behavior in that you can outsource many of your social interactions, but at the end of the day, _you_ as an individual have chosen to outsource those interactions.

I quit Facebook nearly 3 years ago, and it certainly 'cost' me some superficial relationships. At the same time, the relatively few relationships I've worked to maintain outside of Facebook feel more fulfilling and way less anxiety inducing than when I outsourced everything to FB.

<comment><USER3> Victim-blaming is ugly, and doubly so when it involves such profound loss.

The text makes it quite clear she did her best to keep up: "Now, I'm a meticulous FB feed peruser. I always set it to Most Recent and browse until I see the stuff I saw last time. I keep up."

Facebook's whole value proposition is to make it easy to keep in touch with people. Here they clearly failed to live up to their promises. I'm glad you're happy with your choice not to use it, but that doesn't mean those who chose differently are assholes.

<comment><USER94> It's not victim blaming when you're trying to pull a positive lesson from someone else's tragedy.

And I might add, Facebook's value proposition is about getting personal details about individuals and compiling that into billions of dossiers valued by advertisers. If you're not the customer, you're the product.

<comment><USER95> I don't know if it's victim blaming but it's something ugly to rub someone's nose in their pain and tell them what a failure they are. This is brutish behavior masquerading as moral correction, and it's deeply unwelcome on this site.

</comment></comment></comment></comment><comment><USER96> Reading something like this: I feel like TWTR users need to find a better product.

</comment><comment><USER97> I guess... I don't really care.

If the FB feed is the only way you "stay in touch" with someone, you're not friends. At best you're acquaintances. This person makes no attempt to speak to her "friend" for who knows how long and is now outraged that she didn't see one of his posts.

Yeesh, get over yourself. If she actually cared she would have been in touch in other, more personal ways.

<comment><USER95> > _I don 't really care. [...] Yeesh, get over yourself. If she actually > cared_

Please don't post uncivil comments here. Instead, read [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html) and take the spirit of this site to heart so we can all have at least one semi-decent place on the internet.

Edit: it looks like we've had to ask you this multiple times before. We eventually ban accounts that ignore these requests, so would you please fix this?

<comment><USER54> I don't see what's uncivil here, there are no insults. And you speak as if you were an admin, but you obviously aren't.

<comment><USER95> I'm an admin; sorry that wasn't clear.

It's uncivil because (a) it's uncharitable about a painful situation and (b) "Yeesh, get over yourself" is a swipe.</comment></comment></comment></comment>


Ask HN: Any possibility of making a pay-to-use Firefox extension? - <AUTHOR>

Ask HN: Any possibility of making a pay-to-use firefox extension?
I'm developing an app on the firefox platform. I would like to know if there's anyway to make a pay-to-use extension (license key to activate thru net?). Pay-and-download would result in piracy.
Has anybody done this? How would you go about it? <comment><USER2> I (actually mostly a contractor, though I ended up maintaining it) built a toolbar back in the neolithic era (Firefox pre-1.0) for managing a URL black/white list for a product I was developing at the time. We gave users a username and password (the same one they used on the website version of the tool), and they simply logged in. Anybody could download it, but it didn't do anything useful if they weren't logged in.

<comment><AUTHOR> I'm trying to build a better extension builder for firefox.

So there's no data that's going to be downloaded or used by the extension from the project site. Thats where i'm stuck. I can still provide login credentials and allow the user only if the user check on the website passes. So i can charge a per month fee maybe. But wont the user just edit the extension files and disable the user check?

I'm gonna have to spend atleast another 4-5 months on this and give it my best. So just dont want it to go waste.

<comment><USER2> I think you're being overly paranoid.

The people who pirate software don't buy software if they can't get a pirated version. They just don't use it.

Offer support and updates via your website (requiring a login associated with a valid license to get it), and you'll make it really hard to steal the whole value of your product. Make automatic updates contingent on a valid license. Phoning home is really hard to crack, since you have control over the whole interaction and if you don't want to serve the update there's not a lot the user can do to make you. If they disable automatic updates, they lose the new features until another crack appears. If they leave them enabled they get a popup reminding them that they haven't paid for your software (subtly, though, as sometimes the user is innocent and the problem is technical or on your end; something along the lines of "It appears your license is invalid. Please contact blah blah for assistance in correcting this issue.").

The nice thing about this is that it keeps you honest. People who pay for software expect, and deserve, regular updates correcting bugs and such. If your license provides a year (or until the next major revision, or whatever) worth of updates, you'll increase your sales and your customer satisfaction.

</comment></comment></comment><comment><USER3> I think its possible, I would pay for firebug now that I've used it so there is a market.

</comment><comment><USER4> Okay, real answer. First of all, you'll never be able to avoid piracy. Nature of the medium.

Second, the best way would be to embed individual user credentials into the extension. As in, they signup and pay or whatever, and you generate a unique extension that contains their authentication information, which they then install.

What is this for?

<comment><AUTHOR> Its a developer tool so the target audience are developers.

<comment><USER4> But what does it DO?

</comment></comment></comment><comment><USER5> Does the license even permit this? I'm not going to do the legwork for you, but I'd examine this very carefully with the help of a lawyer who has worked on these sorts of issues before. This may mirror the driver issue in the linux kernel -- even plugins may be contaminated by open source licenses. (Contaminated used in the nicest way possible; I'm a big fan of OS licensing and software.)

<comment><USER2> Yes. Mozilla products are licensed very generously. It is a roughly BSD-like license, though it has stronger trademark and liability terms.

The license is online, and the Mozilla foundation has never been secretive or quiet about permitting commercial uses. Several companies have built commercial products using XUL for the UI, for example.

This is definitely not a GPL-licensed codebase, and the license is in _no way_ "viral".

</comment></comment><comment><USER4> Firefox.. is not a platform.</comment>


I ranked every Intro to Data Science course on the internet, based on data - <AUTHOR> https://medium.freecodecamp.com/i-ranked-all-the-best-data-science-intro-courses-based-on-thousands-of-data-points-db5dc7e3eb8e#.dk1oajg5t <comment><USER2> I was searching exactly for this! Today, internet provides us a lot of options, but it is quite hard to filter what are the best choices, specially when we are talking about e-learning and JS Frameworks hahaha

Probably I will checkout the next posts.</comment>