Why Johnny Can't Write Multithreaded Programs - <AUTHOR> http://blog.smartbear.com/programming/why-johnny-cant-write-multithreaded-programs/ <comment><USER2> > If you need a lock, then you probably have global mutable state that has to > be protected against concurrent updates. The existence of global mutable > state indicates a flaw in the application's design, which you should review > and change.

No, no, no. If you are writing multithreaded programs, you _will_ have locks, period. The question is whether you explicitly use them or if they are hidden somewhere in your libraries, frameworks, etc. Actually, the latter are much more difficult to debug. Most of us have probably seen situations where deadlocks or data corruption has occured because of some extremely complicated interaction of message pumps - UI thread - callbacks - async operations - etc., without any explicit locking.

> Perhaps most importantly, modern programming languages and libraries make it > easy to create a producer-consumer application.

Yes, that's great again, until the deadlock-corruption-indeterminism problem comes back again in a different abstraction level.

There is _no way out_. If you are writing concurrent apps, you have understand what's happening. By concurrent I mean concurrent on the level you are working on. Using a parallel 'map' operation is different because the concurrency is an implementational detail from your perspective. But if you are writing a massively concurrent quoting/trading engine, then you have to know what's happening. And if you do, then you're free to use locks, executors, async, whatever -- it's just a tool to solve the problem.

...

The more I look at this article the more ridiculous it seems...

<comment><USER3> "If you are writing multithreaded programs, you _will_ have locks, period."

Not necessarily. In scientific computing, it is common to encounter "embarrassingly parallel" scenarios where each thread can solve equal-sized chunks of the problem, and you can wait till all threads have terminated to collect results.

edit: Okay, the final wait is usually implemented with a lock under the hood. Nevertheless, this type of program is straightforward to reason about.

<comment><USER2> And of course that 'wait' operation does not involve locks and/or condvars.

Oh wait.

<comment><USER4> Who cares how it's implemented? Manually using a lock is a smell in the same way that goto is a smell. Wait for a task to finish is not a smell in the same way that while is not a smell.

<comment><USER5> "Manually using a lock is a smell in the same way that goto is a smell."

The presence of a lock tells you nothing about whether a program is well- designed. In fact, the whole idea that you can argue about the correctness of a program from the presence or absence of "code smells" is absurdly simplistic. I have seen plenty of bad code littered with while statements.

<comment><USER6> Code smells (I don't like the name either) are just warning signs. They do not necessarily indicate an actual problem.

Incorrect use of abstraction levels, such as using tools that are too low- level and error-prone for the task at hand (as in the majority of business applications) _IS_ one of those warning signs. It usually indicates a conceptual problem, and makes the code needlessly complex.

</comment></comment></comment></comment></comment></comment><comment><USER7> To me, saying: "Multithreaded programs are not difficult, you just have to know how to do them" is extremely similar to "Multithreaded programs are difficult, and you have to know how to do them"

I've done a lot of multithreaded programs, and, yep, you have to use some good practices to avoid making the code explode. You know, having to learn them and stuff is why they are "difficult". Just because you know how to get something done does not make that "easy". That's what experience is for.

</comment><comment><USER8> His argument for "if you use a lock you did something wrong" seems to presuppose that somebody else created handy concurrent data structures for you. In other words, he admits that multithreaded programming _is_ hard, so you should make it Somebody Else's Problem. I don't think that's a very strong argument.

<comment><USER9> Half the world seems to operate on the principle that this sort of stuff is SEP these days, and then sneer at the people who are solving it for being _so_ low-level and not at all modern...

<comment><USER10> A different take on this: we have a small team. We are solving in a hard problem. Other people have solved this other hard problem for us. Let's focus on doing our thing very well, and not spend our limited cycles on redundancy.

I like to drive the point home with this (slightly hyperbolized) statement: X already does this, and those folks need it to be good if they want to eat, so why the heck are we doing it ourselves?

<comment><USER9> Agreed, code re-use is a very valuable and great thing. Where there are well- tested and well-proven technologies to do what you're trying to do, use them (if the license fits, it's not too expensive etc etc.)

But _someone_ has to do the 'hard' parts, and do them well, and I don't see why competent tech folks shouldn't at least be interested in that.

<comment><USER11> Exactly. Things like this just deter people from becoming interested in "low level" things like compilers, runtime systems, databases, etc... and maybe becoming active researchers in these areas.

</comment></comment></comment></comment></comment><comment><USER12> On the subject of multithreading, I like this one by Ned Batchelder[1]:

Some people, when confronted with a problem, think, "I know, I'll use threads," and then two they hav erpoblesms.

[1]: [http://nedbatchelder.com/blog/201204/two_problems.html](http://nedbatchelder.com/blog/201204/two_problems.html)

</comment><comment><USER13> Personally I've found that learning a functional programming language, with strictly enforced 'no side effects' functions, has simplified multi-threaded programming for me. I just remember back to those restrictions and force myself to follow them, whatever the current language allows.

For reference, the language was Erlang, which I believe has the best handling of threading that I've encountered so far.

<comment><USER14> So you've basically experienced the benefits of actors (message-passing style, no shared state). But you can use message-passing paradigm in imperative languages too, though it's rather cumbersome in non-extensible languages like C or Java.

<comment><USER15> I think (s)he strongly implied that. I'd simply flat-out say it, the best way to learn how to program in an imperative multi-threaded environment is to clock enough time in Erlang, Haskell, or perhaps Clojure (with as much immutability as possible) that you can get real work done (not merely finish a couple of tutorials) that you are forced to learn how to program in a minimal- sharing style, then if you go back to something like Go or something, it's really not that hard.

I think you can learn how to program multithreaded code well without that, but you'll learn a _great_ deal faster if you use a language that kicks you in the face every time you do something stupid (or simply doesn't let you do it). As in, potentially an order of magnitude faster. Fast feedback is non-linearly better than slow feedback.

Though this does assume you get to greenfield the multithreaded code. Woe betide ye who have to retrofit existing poor multithreaded code. I don't even know what to tell you, except you have my pity.

<comment><USER13> That's correct, I love the actor system in Erlang, and I wish I had access to it in every other language I've used.

Building multi-threaded applications with functional programming forced me to write pure functions - or close enough, Erlang does have _some_ side-effects but this is just to make it more useable than the _mostly_ academic Haskell.

I've carried this approach into C# and Java, and typically end up with methods that fit a multi-threaded paradigm by default because of their lack of state. As a freebie, they can be effortlessly unit tested by mocking their direct parameters and testing the return values (no need to mock or test state).

</comment></comment></comment></comment><comment><USER16> I have written some multithreaded code and I can agree that it's not too difficult to _write_. What is difficult is testing and debugging multithreaded code.

There are lots of corner cases that you might overlook when writing multithreaded code, and some of them will only ever happen if the threads get scheduled in a particular manner.

Multithreaded software development is not easy, partially because in the past we've acquired practices that don't work very well in multithreaded world. Partially because it's a whole new world which is not thoroughly explored and established best practices do not exist.

But all in all, too many people are afraid of multithreaded code and this is holding us back. It's not scary or difficult, it just requires a more rigorous approach at times.

</comment><comment><USER17> Writing a background thread that does a long-running calculation? easy.

Writing a background thread that can be cancelled immediately, that gives useful progress information, that doesn't leave other threads indefinitely blocked if cancelled, and that cleans up after itself if cancelled? hard.

For my single-threaded code I have great static analysis tools, IDE magic, and testing frameworks. For my multi-threaded code, I'm on my own...

<comment><USER18> > For my single-threaded code I have great static analysis tools, IDE magic, > and testing frameworks. For my multi-threaded code, I'm on my own...

That's a big point. The tooling for parallel code is developing really slowly compared to the proliferation of multi-core processors. Most of it seems to be "we'll make the library multi-threaded but all your code will still be single- threaded" like we see in Node.

</comment></comment><comment><USER19> Whoa whoa whoa. Slow down. When did I become an Applications developer and not a systems developer? The kernel I work on uses TONS of threads and locks. And sure, it's fucking crazy to debug. But I don't think you'll be prying mutable state from the cold dead hands of kernel developers any time soon.

<comment><USER6> I think it's pretty clear if you're a systems developer (or someone writing a library with concurrent data structures), this article doesn't apply to you.

The majority of developers aren't going to be systems developers, though. Just as the majority of developers don't use assembly language either.

</comment></comment><comment><USER20> I think there's another simpler factor: some people are just naturally better wired to think in terms of concurrency.

There's a certain thinking style you bring to writing and understanding concurrent software. You need the ability to "visualize" the contexts, behavior, and data access. You need to see the possible race conditions and understand what resources need to be "protected" and how.

Reminds me of recursion. Back in my CS days, it just made some people's heads explode. They couldn't think in a nested fashion to understand what was going on at various recursion levels, nor what was required to terminate, what should be returned, etc.

Like-wise with proofs in geometry. Some people just couldn't get there. But, for those who could, it came without too much effort.

You kind of either have it or you don't. You can practice and improve, but some people just naturally "get it". So, I don't think it's as simple as "they learned the wrong approach". In fact, if they truly understood the concepts and possessed the requisite thinking style, they would be able to identify the "wrong approach", and the right one.

</comment><comment><USER21> > If a multithreaded program is unreliable it's most likely due to the same > reasons that single-threaded programs fail: The programmer didn't follow > basic, well known development practices.

Well no. It is like saying mt programs are broken because the user didn't know how to write them. It is not saying much. Everything with bugs is broken because the writer didn't know how to write it.

The reality is that multi-threaded is hard because it is hard to reason about and hard to get right. In one large application it only takes on junior programmer to dip their fingers in and add that one module that will crash the system 1 out 1000 run on customer's hardware only.

MT issues and problems on a whole new level of difficulty that is qualitatively different than what single threaded programs experience. Sequential problems and bugs are still there, but now there are a host of completely new things happening.

> These programs very often fit nicely into a producer-consumer model with > three threads:

* The input thread reads data and places it on the input queue.

Well, you also have to make sure the queue is thread safe. Understand what does it mean to get an item off of an empty queue. Now you have queue-using- up-all-my-memory problem if you do stream processing with mis-matching processing rates between parts of your programs. What about objects you put in the queue. If those have any pointers or are pointers themselves now you are back to the original problem. So make sure objects are copies, are serialized/deserialized or there is proper ownership handoff.

In summary, is it possible to write correct highly concurrent programs in a shared memory model with threads/and-or/events -- yes. Is it easy? No, it is not easy.

The article correctly points the often common fallacy that using event/callback-based single threaded approach is superior and avoids all the concurrency related issue. It doesn't avoid all issues. Now the race is between callback/errback chains instead of threads. Granularity is much higher (if incrementing a shared 64 bit int is fine without a lock). But the need to protect shared data structures is still there. The danger is psychological because one thinks "hey this is safe, I don't need anything to worry about"

That is why I believe it is better to use a language/system/framework that uses isolated heaps and rigidly enforces separation between concurrency units. Erlang has that, D has some of that, Nimrod, Web Workers and Dart isolates to that. You incur a speed penalty for that. Don't be shy about using regular Unix OS processes. Those are great for isolation and do it well. The cost of IPC and cost of creating them can also be high. You in incur a penalty for copying data between concurrency units, but remember, there is a bigger penalty you incur when the program has crashed. The converse of that is, the biggest performance gain your application will achieve is when it goes from not working to working and staying working.

<comment><USER22> _Is it easy? No, it is not easy._

Correction: It's not easy in most programming languages, because most programming languages fail at implementing mutual exclusion in a way that is safe. It's basically the same problem as buffer overruns in C, where indices don't get checked (except that in the concurrent case, most languages don't require you to associate a lock with shared data and/or don't verify that you hold the lock before operating on that shared data).

Per Brinch Hansen's famous rant gives the gory details [1]. The basic technology had been figured out in the early 1970s.

[1] [http://brinch-hansen.net/papers/1999b.pdf](http://brinch- hansen.net/papers/1999b.pdf)

<comment><USER23> Trapped behind a web filter so your link was filtered as "Personal Site". I believe [1] is the same document for others in the same situation. Also, thanks for the link, it's an interesting read.

[1] [http://cse.unl.edu/~witty/class/csce351/howto/PBHansenParall...](http://cse.unl.edu/~witty/class/csce351/howto/PBHansenParallelism.pdf)

</comment></comment></comment><comment><USER24> I think the article has some good points, but he should spend more time discussing what circumstances you can block when waiting for a result, and how to balance too much blocking against too many asynchronous states.

I think his focus on "global mutable state" is a bit of a red herring. It makes no difference whether the mutable state is global (protected by a lock) or owned by a single thread. You can refactor all your synchronized {...} blocks and replace them with executor.execute(futuretask); futuretask.get();, where executor is a single-threaded event loop and futuretask.get() blocks for the operation to complete. This refactoring would make a single thread the owner of the state, but there would be exactly the same number of deadlocks. Conceptually, you can think of your critical sections as a separate thread on which you invoke methods and then block until completion.

After refactoring to use Executor and BlockingQueue, one still has to make sure there are no cycles in which threads are allowed to block waiting for which other threads.

</comment><comment><USER25> IMO the problem with threads is the 'all-or-nothing' approach to shared data. If you want to make use of multiple CPUs, you either use threads, in which case _all_ of your process data is shared, or you use multiple processes, where _none_ of the data is shared. It is the over-sharing that trips people up with threads.

Ideally, we need an API that allows selective data sharing, so you greatly reduce the chance of one thread trampling over bits of another. Right now, the common way to do that is with multiple processes and shared memory regions, but it is cumbersome to set up and requires the programmer to treat the shared data very differently (e.g. one process can't just malloc data for a string, say, and then let the other process access it.

The other route is through message-passing, but again you have to write your code in a totally different way. Someone please invent multi-threading with selective sharing!

</comment><comment><USER26> "Perhaps you've accepted the common fallacy that "Multithreading is hard." It's not."

Bzzt full stop epic fail. Think about the other discussion today about the "naturalness" of zero or one based arrays.

If multithreading was natural and inherent part of all noobs, you'd teach programming beginning with multithreading and maybe later on you'd have some weird module which confused most of the class explaining how some legacy languages and systems only allow one thread which has certain unusual programming constraints that most of the class would screw up. Also all automata theory classes would begin with the eNFA as the base class and later on tell the kids about DFAs being broken forms of a NFA and all that. I'm just not seeing it.

The article did fail at architectural level. Most non-threaded programs can't be upgraded to threading because either its not worth the effort or its impossible to solve the actual problem without threads so the postulated single threaded solution can't exist therefore you can't upgrade what could never have been implemented. Why are you multi-threading?

Most likely if you're adding multi-threading explicitly to a single threaded app for an inherently multi-threaded problem, you're going to spend all your time figuring out how the single threaded part exploited some other component of the entire system to create a psuedo-multi-threaded app. Perhaps it relies on the OS to spawn multiple clients in a client server arch where all the processes live on the same CPU or something. The problem isn't just adding a thread so you can checkmark a marketing box that its now a multi-threaded app so someone can collect an end of year bonus, the problem is you need to scrap the whole thing and start architecture work from first principles.

Another funny part was the natural assumption that all programs/projects will be huge enough to contain at least two completely non-interacting subsystems so no global state is the ideal. That's a dumb architecture design or business decision. Lets think of an example where you would have threads with no global mutable state. How about a tetris implementation in one thread and an enterprise rational DBMS system in another thread and an IRC client in another thread, all in the same program/project. That's just a dumb architectural idea, make totally separate projects. Make the smallest usable debuggable tools and use them together, not the largest undebuggable swiss army knife the world has ever seen.

</comment><comment><USER27> This is one of my largest weaknesses. I haven't come across any good resources for self-study on this topic. I haven't found any online course-type resources, and the books i've found are hard to follow. Any recommendations for how to learn this stuff would be very welcome.

<comment><USER28> Would people be interested in a getting started type tutorial using Zero MQ? As I replied to thewarrior below, the manual is very good and it made multithreading an absolute pleasure for me but it's not really an introduction to threads - I had to experiment quite a bit. I can do it for C, Python and Lua.

What would be useful examples? Multithreaded video decoding? Scaling out calculations to multiple cores?

<comment><USER27> That would be awesome. I just got on a new project a week ago where the PM sent me a link to Zero MQ and basically said "here, read this".

</comment></comment></comment><comment><USER29> > The programmer didn't follow basic, well known development practices. > Multithreaded programs seem harder or more complex to write because two or > more concurrent threads working incorrectly make a much bigger mess a whole > lot faster than a single thread can.

Actually, I prefer to think that the reason multi-threaded programs are harder to write is because it's harder to compose components together. If I have a regular old function and another regular old function and compose them, I get a regular old function and I know that it works how I expect it. With two multi-threaded functions, then I have no guarantees anymore. If I cannot take simple components and combine them into more complex ones, how am I suppose to write correct code? Sorry, but I'm just not good enough.

<comment><USER23> This is where language choice and concurrency libraries become critical. Erlang's (IME) processes are nearly as composable as functions. With golang's channels allow something similar. ZMQ seems to provide a similar mechanism in a language agnostic fashion, though that seems to be about connecting multiple processes rather than threads (do people use ZMQ for interthread communication and syncronization?).

</comment></comment><comment><USER30> I am in no position to call my self I can write good multi threaded programs but... damn people are bad. Once I worked in an embedded project that had sleeps in UI thread and then people started to use threads for 'optimizing'. It didn't go well

</comment><comment><USER31> Multithreaded code is more difficult to write and more complex to debug by any objective measure.

"There are difficult multithreading scenarios, just as there are difficult scenarios in the single-threaded world. But those are relatively rare."

Is this some sort of flame bait?

</comment><comment><USER32> A bigger problem than people writing concurrency poorly is that they jump to concurrency too soon and think it is going save them from their performance problems. It almost certainly won't.

Contrary to the growing popularity of message passing concurrency, modern commodity hardware is not massively parallel and jamming massively parallel algorithms on top of it generally is a mismatch. You are almost certainly better off having a few well defined threads that are fast than unbounded threads that are slow.

</comment><comment><USER33> I like Rust's approach (it's not new, but Rust does a good job of the total implementation). When I'm using Rust, I know that data race in safe code is _impossible_.

(I know this isn't quite all there is to the problems of multithreading, but it's a very high percentage indeed in almost all applications.)

</comment><comment><USER34> >> If you eliminate shared state, you have no reason to misuse those synchronization primitives.

A multi-threaded program that doesn't need to share state probably isn't the usual case, not from my experience anyway.

Locks are not evil, think of a railway station, there are sections of track that must be shared by multiple trains.

</comment><comment><USER35> Thanks for the article. When I have free time I will look into the various tools that modern languages provide to solve problems that are usually handled with threads.

I would have appreciated an article on the various "libaries" we should be using instead.

</comment><comment><USER36> Is there a list of languages which use separate heaps for each thread? I'm really interested in learning more about that concurrency model, but haven't had much luck compiling a comprehensive list of which languages actually use it

<comment><USER37> javascript with webworkers

</comment></comment><comment><USER5> The author seems to think it is all about avoiding mutable global state, but it is more than that: it is about shared resources and temporal ordering, and these are not issues that can, in general, be avoided in the simple way he supposes.

</comment><comment><USER38> its interesting - but there is something fallacious here:

"Probably the most important lesson to be learned from the past 60 years of software development is that global mutable state is bad. Really bad."

This represents a misunderstanding about the badness of global variables and the goodness of encapsulation in my mind. Mutable global state is an unavoidable necessity to ship your app - every single pixel on your screen is a bit of global mutable state. I won't dive to far in here, but I cringe everytime I see these fancy pants words applied because its pretentious /and/ trivially measurably wrong (see everything on your monitor right now).

</comment><comment><USER39> As a n00b programmer I must say that the author dosen't give any examples on how locks are commonly misused or exactly how to avoid these pitfalls other than to say "Avoid global mutable state".

<comment><USER28> I am not a n00b programmer by any means but I've never needed to use threads until recently. Non-trivial threading - like decoding video in the background and coordinating with audio kind of non-trivial - is hard. Difficult to reason about, unbelievably frustrating to debug, errors seem random, races, deadlocks - you name it, I struggled with it.

That all went away when I discovered Zero MQ ([http://zeromq.org/intro:read- the-manual](http://zeromq.org/intro:read-the-manual)). The manual claims:

"If you've spent years learning tricks to make your MT code work at all, let alone rapidly, with locks and semaphores and critical sections, you will be disgusted when you realize it was all for nothing."

It's not exaggerating. ZMQ's multithreading is marvelous. No mutexes, no locks, no semaphores, no critical sections, no load problems - just perfectly scalable threads that work with any language on any platform. In fact it's so cool, that if you don't have a problem that needs multithreading, go out and find one.

<comment><USER40> ZMQ still relies on a message passing model, which is orthogonal to the threaded shared memory model all our hardware actually presents to us. The advantage is more being able to go from threads to processes, then to the network, easily. That advantage is just as useless to most applications as threading is to achieve concurrency (rather than parallelism).

<comment><USER28> "ZMQ still relies on a message passing model, which is orthogonal to the threaded shared memory model all our hardware actually presents to us."

So what? There are all sorts of successful language and computing models which are light years removed from threaded shared memory. Message passing without sharing state, except for some lock-free primitives, is bloody brilliant for very scalable concurrency - as Erlang has shown us for coming up on 30 years now.

"The advantage is more being able to go from threads to processes, then to the network, easily."

That's the raison d'etre for ZMQ to be sure. But very pleasurable multithreading is a massive advantage too. If it scales out to nodes as well, so much the better.

"That advantage is just as useless to most applications as threading is to achieve concurrency (rather than parallelism)."

Threading using ZMQ message passing is a superb way to achieve concurrency (given that this is the real world and we can't all rewrite our apps from scratch in Go or Clojure). I'm a threading _beginner_ and I've got video decoding, graphics handling and networking for a real time app all in separate threads going great guns without falling over or messing each other around - on a very low spec machine too I might add. On a four core workstation, all threads get a whole core to themselves no problem.

Try it. You'll like it :)

<comment><USER40> Any locked (or lock-free) pointer queue with the right ownership semantics will give you what ZMQ does _within_ a threaded program. A coroutine library will get you even more flexibility if you just want to setup pipelines. If you want greater scalability, there are lots of non-blocking I/O event libraries (libuv/libevent/boost asio). None of these solutions involve moving to a message passing model.

I'm not discrediting that operating between threads is a handy addition to ZMQ, but using it for communication between threads seems like a lot of work (moving to that message passing model) if you never intend to leave one process.

I do happen to like messaging, but when your data becomes complex it's a right dog...you're now in the world of protocol design.

<comment><USER28> "Any locked (or lock-free) pointer queue with the right ownership semantics will give you what ZMQ does within a threaded program."

OK, now I think you're trolling, perhaps by cutting and pasting from random technical manuals. What you said there makes no sense at all. Could you paste some example code please?

"A coroutine library will get you even more flexibility if you just want to setup pipelines."

Now I _know_ you're trolling. Coroutines are completely useless for real concurrency like decoding audio and video in the background simultaneously - because only one coroutine can be executing at the same time.

"If you want greater scalability, there are lots of non-blocking I/O event libraries (libuv/libevent/boost asio). None of these solutions involve moving to a message passing model."

What if I don't really care about I/O? What if I have a small program that needs to use multiple threads on multiple cores to efficiently search a large problem space while doing video decoding in the background and having a responsive UI? I must just link to Boost? Er, no thanks.

"I'm not discrediting that operating between threads is a handy addition to ZMQ, but using it for communication between threads seems like a lot of work (moving to that message passing model) if you never intend to leave one process."

Compared to getting synchronization right, optimizing critical sections, debugging random failures under load, it's trivial.

"I do happen to like messaging, but when your data becomes complex it's a right dog...you're now in the world of protocol design."

I'm going to assume that you're still in school or not actually a programmer. ZeroMQ is used by AT&T, Cisco, EA, Los Alamos Labs, NASA, Weta Digital, Zynga, Spotify, Samsung Electronics, Microsoft, and CERN (I grabbed this list from its front page). CERN just published a report in which it evaluated ZeroMQ for a custom middleware solutions running 4000 server processes communicating with 80 000 devices for a total of 2 000 000 I/O points that could be queried. It aced the requirements. Erlang has used message passing for decades in the telecoms industry which has enormously complex data and unique realtime, distributed requirements.

Protocol design is easy. Main thread creates child. Child loads video and reports its ready. Main thread sends START. Child thread receives START and starts. Child thread reports DONE when done. Was that so hard?</comment></comment></comment></comment></comment></comment>


The Rise and Fall of Domain Fronting - <AUTHOR> https://www.sentinelone.com/blog/privacy-2019-tor-meek-rise-fall-domain-fronting/ <comment><USER2> Great post!</comment>


Ask HN: tools to create feature-level comparison matrices? - <AUTHOR>

We've been using Excel to create feature matrices to compare different tech components, listing both technical features as well as fit to our needs (e.g. using 1-5 stars to indicate how it fits our requirements). We've done this for storage devices, cell phones, and are now considering switching from PC to Mac and are trying to compare across the two. Creating these sheets is time-consuming and brain-deadening, and made me wonder whether there aren't some web-based tools that do this for you (e.g. scrape feature listings for a Dell and a Mac PC to let you compare / contrast). Any ideas? <comment><USER2> Try Google Squared <http://www.google.com/squared/search?q=laptop>

<comment><AUTHOR> Nice! I always wondered what Squared might be good for pragmatically. I've played around with it a bit since yesterday and the parsing is pretty raw, esp for spec sheets from the Dell site (which surprised me). But you can save it to Google Spreadsheets and go from there, so it looks like a nice way to get started. Thanks!</comment></comment>


Hackers' screen shots - <AUTHOR> After reading the article on fonts, I thought it might be kind of fun to share screen shots of our working environment.  Just remember to edit out anything sensitive! <comment><USER2> As of now, the technology count is:

     Languages:
     4 Ruby
     4 Python
     4 C/C++
     2 Java
     2 Lisp
     1 HTML
     1 Scheme
     1 Mathematica
     1 Javascript

     Editors:
     8 Emacs
     5 Vim
     1 Visual Studio
     1 Eclipse
     1 Netbeans

     Browsers:
     8 Firefox
     2 Opera
     1 IE

     OS:
     11 *nix
     8 MacOS
     2 Windows

Possibly modulo a couple of miscountings. If people had multiple programs open (like one person with both Firefox and IE, or my own setup with Windows + Ubuntu VM), both are counted. I omitted obvious jokes, like the Commodore 64 screenshots or Don Knuth's desktop. And it only includes editors I could identify, so whatever you Mac folks are using to edit your Ruby isn't included.

<comment><USER3> Nice. My desktop is a few years old, so subtract one from the C/C++ camp. I use python and ruby equally, though, so it doesn't help break that tie.

</comment></comment><comment><USER4> I seriously don't understand how you people can work with all the visual clutter. I like a much more naturalistic approach:

<http://img504.imageshack.us/img504/217/workspacefh6.gif>

<comment><USER5> Nice. <http://inglua.com/blog/images/c64.png>

Lack of syntax highlighting is very easy on the eyes.

<comment><USER4> I think its time to make a new texteditor / micro-ide

</comment></comment></comment><comment><USER6> I'm sure my desktop would look pretty stark to most people. That's the way I like it though. Basically I only ever have two windows open, both maximized - Emacs and FireFox. I spend 90% of my time in Emacs - this is what it looks like:

<http://abstractnonsense.com/desktop.png>

(that's not my code btw - it's a random python library).

If I knew of a way to hide even more superfluous stuff (window decorations, the menu bar) I would do it.

<comment><AUTHOR> Wow - couldn't you squeeze in some more emacs windows on the right to visit more files at once? Or is that kind of thing just noise/distraction? I could certainly see some people preferring the simplicity to my more noisy 3 emacs windows and 4 rxvt's.

<comment><USER6> Yup, it's just noise to me. I prefer to have the other buffers loaded in Emacs, but not displayed on the screen where I'll be distracted by them.

My perfect dev environment would go as far as blanking out everything in my peripheral vision too - maybe a set of VR goggles that _only_ displays an Emacs window, dead center ;-)

<comment><USER7> I do the single plain window of emacs thing too (though I use Terminal, not the built-for-mac Emacs GUI, and I only go 90 chars wide on my window). I usually run three UNIX shell buffers inside of emacs, in addition to all the source code buffers. I never go to the mouse while in Emacs (because it doesn't do anything), which helps me move quickly.

<snobbery>I get a bit frustrated when I need to look over someone's shoulder while s/he is doing some programming related task. So many people move very slowly thru their environments. I want to show them the way...</snobbery>

I wasted about 2 hours of my life once trying to trick out my Mac to be that "one Emacs window and nothing else" setup that you're talking about. I never really found anything that worked, though.

<comment><USER8> This may seem like an obvious point, but have you tried Linux (or another Free OS) with a tiling window manager? OS X does give you a nice prepackaged experienced, but if you love to tinker and have complete control to customize anything, Linux is ideal. And you can always dual boot, if you just want to try it out part time. =)

<comment><USER7> The thing is, when I'm doing anything but programming (web surfing, watching a DVD, playing music, etc.) I want the smooth, easy-to-use, pleasant-looking experience that I get on a Mac. I periodically try Unix window managers to see how they're doing, but they honestly always seem pretty clunky to me.

But let's say for a minute that I did go the Unix window manager route. What would you recommend if I wanted to have one "mode" where basically everything is stripped away (no menu bar, no windows, nothing -- just a shell), and another mode which was your standard GUI? It would have to be fast to switch between the two.

<comment><USER9> Install X11 on your Mac and set it to run in fullscreen mode. Then install xemacs or whatever and you're set. When you're in X11, fullscreen programming. When you Cmd-tab away, OS X goodness.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> <http://www.csh.rit.edu/~apox/images/screenshots/20071031.png>

My four desktops merged into one image. I'm using FreeBSD+ion.

<comment><USER11> Girl Talk: excellent choice of hacking music.

<comment><USER12> Downloading now. If you're wrong then die. Free beer otherwise.

<comment><USER13> he was right.

</comment></comment></comment></comment><comment><USER14> this is from some loser named Don Knuth: <http://www-cs- faculty.stanford.edu/~knuth/screen.jpeg>

<comment><USER15> This would be better:

<http://www.texmacs.org/tmweb/home/screenshots.en.html>

</comment></comment><comment><USER16> <http://126.96.36.199/~zak/screen.png>

Normally 1680x1050, but I'm using an external monitor until I find time to get my laptop's LCD fixed.

<comment><USER5> Can you live with that font? No anti-aliasing and Courier New?

<comment><USER16> It was good enough for...

Actually, yes. It's quite readable and fairly compact. I've tried a few other fonts (most of the ones mentioned in the fonts thread on here) and found most of them take up more space or are less readable. Dejavu Sans Mono might look better with anti-aliasing turned on, but most of the time I've found anti- aliasing just makes fonts look blurry.

<comment><USER17> Lucida Console is both more compact (the reason I use it) and more readable.

Just my 2 cents.

</comment></comment></comment></comment><comment><USER5> Tada: <http://inglua.com/blog/screenshot.png>

<comment><USER18> Wow, Mac OS X in non-widescreen. For some reason, seeing it like that is a jarring experience.

<comment><USER5> I hate widescreen, I'd use portrait mode if my monitor could pivot.

</comment></comment></comment><comment><USER19> My emacs-centric working environment:

<http://brlewis.com/y/2007/devscreen.png>

It's slightly contrived, in that I usually have only one buffer open. I wanted to show that my environment involves switching back and forth between my ideas.txt file where I aggressively prioritize, and the actual BRL and Scheme files where the real coding is done. A large portion of my work is done in 35-minute train rides.

</comment><comment><USER20> [http://farm1.static.flickr.com/133/396296975_1f2e6f41a6_b.jp...](http://farm1.static.flickr.com/133/396296975_1f2e6f41a6_b.jpg)

Linux running Xfce.

Couple of VMs a Xnest and DVD player. And I say again the current way we layout apps is broken. I have a wide screen monitor and most apps do not resize. I anybody working on something to fix this so that an app designed for 640x480 renders a reasonable size on my screen.

</comment><comment><USER21> [http://aycu09.webshots.com/image/32248/2004585555465429860_r...](http://aycu09.webshots.com/image/32248/2004585555465429860_rs.jpg)

Software: Ubuntu 7.10, Netbeans, Opera. Hardware: 2 x 1280x1024 monitors.

Edit: Whoa, apparently webshots doesn't like PNGs. Try this link instead.

<http://img444.imageshack.us/my.php?image=screenshotzh0.png>

</comment><comment><USER22> Here's mine:

<http://www.stanford.edu/~brianrue/workspace.png>

I just alt-tab between Zend and firefox/konsole; at work I run another screen of Firefox off my windows laptop. I don't know how a lot of you can live with so much clutter on your screen, it drives me crazy.

</comment><comment><USER23> you vi/emacs/console guys can hate, but deep down inside you wish your ide was as tight as this :) :)

<http://img49.imageshack.us/img49/4349/desktopel7.jpg>

<comment><USER6> Heh. I think it's funny that the trend in modern IDEs is for your code to get squished into a smaller and smaller box in the middle, surrounded by a ton of random crap. It's the exact opposite to the environment I strive for.

(also, _"Solution Explorer"_? That was the best name they could come up with?)

<comment><USER3> To be fair, he seems to have enough space for code. horizontally at least. Monitors today have plenty of space for random crap. But the bottleneck isn't real estate anymore, it's focus.

What we need is for the other windows to gradually fade out when focus is in this one for a while. One of the video plugins/sites on tv-links had this feature - as you watched a show for a while the rest of the screen would gradually fade out.

Or we could go with two vertical panes: <http://akkartik.name/desktop.html> :)

<comment><USER24> your font makes me want to stab my eyes out... otherwise, nice. :)

<comment><USER3> Response: <http://news.ycombinator.com/item?id=74768>

</comment></comment></comment></comment></comment><comment><AUTHOR> Here's mine:

<http://www.dedasys.com/Screenshot.png>

<comment><USER25> That's about what mine looks like, except I usually have a browser window under the main terminal window, and I only use two workspaces instead of ten (!)

<comment><AUTHOR> The browser is located in the lower left hand workspace, so it's just an alt- down arrow away from the workspace.

</comment></comment></comment><comment><USER26> here's mine:

<http://img161.imageshack.us/img161/3408/picture2jd3.png>

Sorry for all the obfuscation.

Tiger, TextMate, Terminal.app, Locomotive, Firefox, Thunderbird, Adium, Twitterpod. A few more in the titlebar (Desktopple, SpritedAway (obviously turned off for now), MenuMeters), and plenty more in the Dock.

<comment><USER27> That's a beautiful color scheme. Where/how can I get it?

<comment><USER26> which color scheme? if you mean the rainbow gradient I used to cover my private info, that's just one of the default patterns built into photoshop.

Adium is using the standard "Aqua" theme.

TextMate uses the standard "Twilight" theme.

<comment><USER27> I mean the one for syntax highlighting, which I suppose is TextMate (I don't use it).

Incidentally, there is a vim version here: <http://niw.at/articles/2006/08/06/twilight>

</comment></comment></comment></comment><comment><USER28> <http://andrewfong.com/stuff/Picture%201.png>

Firefox is hidden and gets called up as necessary. If I have access to a separate monitor, it gets shoved onto there.

</comment><comment><USER29> Leopard, of course, with 4 spaces and xcode split-screen, Ubuntu 7.10 running under parallels. <http://tildeslash.com/images/screenshot.png>

</comment><comment><USER30> Eclipse, vim and Opera. I like my syntax highlighting scheme, but not many people like colors as much as I do.

<http://dl.getdropbox.com/u/59/workspace.PNG>

<comment><AUTHOR> Wow, that really _is_ colorful, isn't it!

</comment></comment><comment><USER21> I have no clue how so many of you are only working on one monitor. Maybe you've never tried using two, but there's absolutely no way I could ever code again on just one.

The difference is night and day.

<comment><USER31> Screen real estate is like a drug. Addiction creeps up on you quickly, and the more you have the more you think you need. I used to be perfectly content with one 17" monitor. Now I'm looking for a bigger desk so that I can add a fourth 22" LCD.

<comment><USER21> A fourth?

Wow. That's awesome.

</comment></comment></comment><comment><USER32> <http://modeemi.fi/~tuomov/ion/screenshots/ion3-2.png>

OK, not really my desktop. But ion is quite cool.

About 50% of my programming time is spent staring at a maximized vim instance, and about 30% staring at a maximized firefox instance: <http://jey.kottalam.net/tmp/screenshot.png>

<comment><USER33> I actually do run ion3. The only problem I've had so far is that some of the Alt+ keyboard shortcuts interfere with some Emacs shortcuts. One off the top of my head: Alt+G.

<comment><USER34> I just remap/unmap the ion shortcuts to get out of the way of emacs. I have a friend who swears by setting ion's Mod1 to capslock, but my pinky just can't handle that.

</comment></comment></comment><comment><USER35> <http://billmill.org/static/images/desktop.png>

</comment><comment><USER36> my work workspace (OSX) <http://nikolajbaer.us/media/desktop.jpg>

at home its similar, but xfce4 terminals and pidgin on xubuntu.

<comment><USER37> viewbug?

<comment><USER36> ah, a project for a client.. damn i tried to snuff out things like that. It's just yet another media sharing site, we (I) built it in django with ffmpeg.

<comment><USER14> there was some tutorial on recovering original text from gaussian blurs i saw out there, i.e. blurring isn't like a hash function. to be safe you have to totally black it out.

</comment></comment></comment></comment><comment><USER2> Mine: <http://labs.diffle.com/screenshot.png>

</comment><comment><USER38> SDF has something like this: <http://www.deskshots.org/>

</comment><comment><USER8> Standard Emacs/terminal/Firefox on my laptop:

<http://img524.imageshack.us/my.php?image=desktopak6.png>

When I'm docked at work, I usually have Emacs on the monitor and terminal on my laptop screen.

</comment><comment><USER39> My setup in Mathematica...

<http://www.programnature.org/Screenshot.png>

</comment><comment><USER40> <http://webdever.net/screen.png>

I could use a bigger screen...

</comment><comment><USER41> <http://www.goladus.com/images/wokr1.png>

Cygwin, firefox, emacs, C, yacc, putty, outlook, python. (There's php in one of the emacs windows)

</comment><comment><USER42> [http://www.flickr.com/photos/67154802@N00/2473330790/sizes/l...](http://www.flickr.com/photos/67154802@N00/2473330790/sizes/l/)

</comment><comment><USER43> i have 6 spaces open on my macbook pro. i run firefox, safari and mozilla. use adium, transmit, photoshop, terminal, and ituens on a daily basis.</comment>


Covid Shield - open source contact tracing app using Google + Apple APIs - <AUTHOR> https://www.covidshield.app/ <comment><AUTHOR> Tweet from Shopify CEO – [https://twitter.com/tobi/status/1263845940257062912](https://twitter.com/tobi/status/1263845940257062912)</comment>


What to know before you buy or install an Amazon Ring camera - <AUTHOR> https://www.eff.org/deeplinks/2020/02/what-know-you-buy-or-install-your-amazon-ring-camera <comment><USER2> What I don't get about all of these cctv solutions is why you'd want a system that uploads to the cloud at all. Surely it's better to have all the footage on a local device, and then perhaps have a VPN-like tool remote access. Unifi protect works pretty well for me, and I'm sure other local solutions like ZoneMinder work super well too. I've got a fast internet connection, but I don't trust it to be able to handle multiple streams of live video uploading constantly. Coupled with the privacy concerns, why would you choose ring over another vendor of more old-school CCTV?

<comment><USER3> It's not always better. One good case for cloud-linked would be when someone breaks in and steals the DVR. It also doesn't need to constantly upload, because most have motion detection to only upload interesting events to the cloud.

<comment><USER4> Sure, but what thieves actually do is cut your cable/phone line, thus disabling most cloud surveillance systems.

<comment><USER5> Smart thief would just flood the WiFi network with deauth packets since everyone is using these things over WiFi. Disabled it before you even have to be in view.

<comment><USER6> Remind me:don't you need to be connected to the WPA2 WiFi router to send deauth packets?

<comment><USER7> Actually no, you can send deauth without already knowing the key. It's a good way to force clients onto your rogue AP and then obtain the key via captive portal.

[https://www.aircrack- ng.org/doku.php?id=deauthentication](https://www.aircrack- ng.org/doku.php?id=deauthentication)

</comment></comment></comment></comment></comment></comment><comment><USER8> I appreciated this write-up.

\- An aggregate of the various security issues that came up so far (with unvalidated rumors filtered).

\- Touches upon social issues and medium-term unintended consequences: "instilling paranoia", and by association social/racial profiling.

\- Manages to discuss sensitive topics gently without implicit shaming or talking down to the reader. I think Matthew from EFF has done a good job here

\- Both technically correct and easy to understand by non-technologists.

\- Easy to link to, from credible source.

Shame that most people who should read this probably won't stumble across it, at least their technologist friends have a readable article to share.

</comment><comment><USER9> I usually like EFF but this is mostly FUD. Amazon Ring is far from perfect, but this article is not fair. This is the fifth sentence:

> Do you want strangers being able to learn your routines by watching you > leave and return to your house every day?

But then they follow it up with "a few amazon employees were fired for watching videos" and "the cops might request/warrant your videos" and "some hackers got access and did bad things a few times". That is a comically large gap from strangers watching you every morning and evening to learn your habits.

<comment><USER10> The article asserts that if you upload video from Ring devices, it will be seen by amazon employees. This has been shown to be true. Amazon employees are almost all strangers to me. What's the issue with the statement?

"Do you want a few amazon employees being able to learn your routines by watching you leave and return to your house every day?" might be more technically expressive but no more accurate and certainly not any more reassuring or comfortable to me.

The part about cops and hackers are separate issues (and lead to more convincing arguments against cops and cloud services more generally) but this seems like an entirely fair assessment.

<comment><USER11> Do you want strangers to learn all of your important personal information by reading the emails you send and receive?

If you don't trust anybody, the Internet sure is a scary place.

<comment><USER12> >Do you want strangers to learn all of your important personal information by reading the emails you send and receive?

You mean to say this doesn't concern you? That enough PII is being archived in multiple places indefinitely and could be used to build a find grained profile on you?

Imagine how much you can infer just from location data. Sexual orientation. Political affiliation. Religious affiliation. Now imagine what happens when authoritarian regime gains control of such databases. The largest nation on Earth has such a system already - it isn't far fetched.

<comment><USER11> It's just as problematic as the Ring doorbell, if not more so

</comment></comment></comment></comment></comment><comment><USER13> Cameras and surveillance software/services with features like this are in high demand. They do improve safety, and they do prevent loss.

I'm putting something together for work with off-the-shelf cameras, maybe it'll be similar enough that it can be adapted for home use.

I think there is a moral good produced by some amount of private surveillance, on and near a person's own property, controlled by that private person; so we just need to fix people's expectations from these companies which subsidize their services by selling out their customers.

<comment><USER14> I think we just need a security and privacy focused alternative that doesn't suck that:

\- does all video processing on the client (e.g. as it's generated) \- optionally uploads encrypted video to the cloud \- stores encrypted video locally \- allows sharing video by downloading and decrypting that video on your device \- never stores the key in the cloud

Ideally, it would be a drop in replacement for Ring, but with the complicated logic done on the camera or your viewing device. I'm happy to pay extra for that, though I think it can be competitively priced. It should also come with an optional VPN device/service to access your cameras when outside your network.</comment></comment>


Chomsky on the current media landscape - <AUTHOR> http://www.alternet.org/media/noam-chomsky-why-internet-hasnt-freed-our-minds-propaganda-continues-dominate <comment><USER2> If anyone is unaware, the title of Chomsky's book refers to this: [http://en.wikipedia.org/wiki/Consent_of_the_governed](http://en.wikipedia.org/wiki/Consent_of_the_governed)

<comment><USER3> Actually, it refers to a phrase used by Walter Lippman in his seminal 1922 book, Public Opinion [1]. The genesis for the book is the lead-up to World War 1. The US population was rabidly ANTI-war at the time. In fact, Woodrow Wilson won re-election on the slogan "He kept us out of the war."

But the US banks were in a position to lose billions if Western Europe was defeated in the war, and so the power elite decided that it was necessary for the US to enter the war to protect the interests of the 1%. The intellectuals of the time believed that it was possible to win over the American public by creating what was effectively the first mass propaganda campaign in history. At the time, the word "propaganda" didn't have the negative connotations that it has now, so Edward Bernays, who was really the mastermind of the effort, wrote a book titled "Propaganda" summarizing everything they learned in converting the American public into Hun-haters.

After the war ended, the fear that the liberal intellectual class stirred up against the Huns, was immediately transferred onto the communists. And then these same intellectuals moved into comfortable positions on Madison Ave and made millions creating the modern advertising industry.

[1] [http://en.wikipedia.org/wiki/Public_Opinion_%28book%29](http://en.wikipedia.org/wiki/Public_Opinion_%28book%29)

<comment><USER2> Thanks, I did not know that the phrase had originated with Lippmann.

The bibliography looks interesting, I'm aware of the broad outline, but not the details.

</comment></comment></comment><comment><USER4> Not even Chomsky's interview can avoid being juxtaposed with the utter nonsense "sponsored by Taboola" links below it.

</comment><comment><USER5> I'm a bit taken aback by the findings in this article. I thought the opposite in fact when I read this. I will say that according to our own growth as a society, we have taken it upon ourselves to create an absorbable rate of finite information to be spread amongst the globe without neccesarily understanding the entire story. However, that is not to say that propaganda rules the internet. On the contrary, it would only enhance our continual perspective into the current dynamics on a global level, in order to denote patterns of auspiciousness that enable us to learn more about current niches. As such, we cannot forget that being in a capitalistic society we must also be self-aware of the market dynamics at play too. I am not an linguistics or media expert to that extent but it would be neccesary to understand that there must be a disclosure over current headlines either through financial reporting or in some ways by analytics experts whom measure the content of these newpaper organizations objectively and in essence try to understand what is the lexical information they are providing to the public. In this way we can understand and begin to denote the granular changes occuring daily. Before I get over my head explaining a difficult problem to solve I wil say I hope there could be some research done in the AI / machine learning realm in order to understand what sort of vectors would be measurable here. Thank you.</comment>


Unreal Engine and Quixel: Pushing the Boundaries of 3D – Webinar – Unreal Engine - <AUTHOR> https://www.youtube.com/watch?v=KhTPayu_YUs <comment><AUTHOR> Looks like a great tool for both game and movie creators...</comment>


Ask HN: Could a treatment for Sars-cov-2 get Medicine Nobel Prize? - <AUTHOR>
 ? <comment><USER2> I don't think so. It would be of vital importance to the world right now, but unless they've discovered a new method or something fundamentally changes our way of understanding the human body. It will not be Nobel-prize-worthy. At least from the news I'm reading, we are using existing methodology, but not something new.</comment>


Bayesian Wi-Fi - <AUTHOR> http://www.openias.org/bayesian-wifi-rate-control <comment><AUTHOR> Any questions? I'd love to understand a bit better what stops this kind of thing from happening / getting done...

<comment><USER2> Does it work for mesh networks? In ad-hoc or similar modern modes?</comment></comment>


Front End Software Developer - <AUTHOR> FS Investments is seeking to hire a Front End Software Developer to support web application software development, including requirements gathering, design, implementation, testing, documentation and support.<p>FS Investments is a leading asset manager dedicated to helping individuals, financial professionals and institutions design better portfolios. <comment><USER2> You should probably post this on the "Ask HN: Who is hiring? September 2017" Thread that'll be posted anyday now.</comment>


Can an Old Vaccine Stop the New Coronavirus? - <AUTHOR> https://www.nytimes.com/2020/04/03/health/coronavirus-bcg-vaccine.html <comment><AUTHOR> _A vaccine that was developed a hundred years ago to fight the tuberculosis scourge in Europe is now being tested against the coronavirus by scientists eager to find a quick way to protect health care workers, among others.

The Bacillus Calmette-Guerin vaccine is still widely used in the developing world, where scientists have found that it does more than prevent TB. The vaccine prevents infant deaths from a variety of causes, and sharply reduces the incidence of respiratory infections.

The vaccine seems to "train" the immune system to recognize and respond to a variety of infections, including viruses, bacteria and parasites, experts say. There is little evidence yet that the vaccine will blunt infection with the coronavirus, but a series of clinical trials may answer the question in just months._</comment>


Saturn's icy moon shoots supersonic jets of water - <AUTHOR> http://www.nature.com/news/2008/081126/full/news.2008.1254.html <comment><USER2> Supersonic? In reference to what? I smell a hyped up headline... The article doesn't seem to mention the reference but it seems likely they're assuming standard sea level Earth conditions for things like temperature\pressure\etc.

<comment><AUTHOR> It's 2,189 kilometres per hour (1,360 miles per hour):

[http://en.wikipedia.org/wiki/Enceladus_%28moon%29%23Possible...](http://en.wikipedia.org/wiki/Enceladus_%28moon%29%23Possible_liquid_water)</comment></comment>


0x22 - Apple's employee #8 celebrates his 34th anniversary with the company - <AUTHOR> http://cdespinosa.posterous.com/0x22

<comment><USER2> A better title would be 'Apple's employee #8 celebrates his 34th anniversary with the company'

<comment><AUTHOR> Done</comment></comment>


Ask HN: I want to build a simple but good website, what do I need to do? - <AUTHOR>

Hello everybody,
I have a small business and would like to create a brochure for the stuff and services I sell online, I don't want to spend more than $500 for now, and I have no problem learning to do anything on my own. What do you suggest guys? Should I forget about it and hand the project for somebody? Or It is possible for me to create a simple attractive website for my business alone? <comment><USER2> Yeah its possible to make one, the cost is time. Learn some HTML and CSS basics, then a little bit of PHP & MySQL, that would give you an understanding with which you would be able to edit and customise wordpress or any other CMS for your own website. You could even come up with your own CMS (content management system).

Well, let me know if I could be of any help - madetokill.com O_o

</comment><comment><USER3> Wordpress and/or PHP.

or drop me an email and I'll make it you :)</comment>


Announcing Andl – A New Data Language - <AUTHOR> http://www.andl.org/sample-page/ <comment><USER2> I sincerely hope that when the time comes there will be an implementation of this called "Java of the Andl."</comment>


Are You A Hacker, Developer or Engineer? (And Why it Matters) - <AUTHOR> http://blog.hartleybrody.com/hacker-developer-engineer/ <comment><USER2> Those terms are used in different ways by different people. Some of the strongest software engineers I've met publicly describe themselves as "hackers". You'll get very confused if you start thinking those words have consistent and distinct meanings. (That's not to say that the underlying categories that the article refers to are invalid.)

</comment><comment><USER3> For me these are three different classes. A good team needs all three of them. And in no way does this mean 'progress' from one level to the other.

A hacker is an explorer, using, exploiting and playing with new technologies, finding quick solutions, often a bit too bored to implement and debug them, but at the forefront of your development process. Their motivation is the fun of playing with new systems, often you can't motivate them with money. They love the chaos that new stuff brings. An engineer is the overall architect, ensuring the system overall's flow and creating the tie between your teams roles. They love order and structure. A developer is the person who implements the elements of the structure that the architect designed. They are trustworthy and can sit down from 9-5 to do boring code work. They often love clean implementations and efficiency.

<comment><AUTHOR> That's a really good point I hadn't thought about. I'm trying to imagine the career path of someone who just wanted to be a hacker. How would they progress?

Also, would you say most engineers started out as hackers, or do you think it's possible to jump straight through the levels.

<comment><USER3> I think what you describe as your experience of hacking is mostly a process of learning through experimentation. Many people learn differently - some first want to understand by studying themselves and do not like to experiment. Others like to be taught and told and follow instructions. For managers it's really important to understand that learning curves are very different - someone may be faced with new technology and write functional code within the day, another person may need several days. It doesn't mean one is worse than the other over the longer term. I have worked with people who would read through programming language books and only then would start coding, while I met others who would start entire projects from sample code. Like yourself I really like the experimentation path.

Regarding the career of someone as a hacker, there are many of them, they just have to find the right environment with enough freedom to work in. Difficult to find it in a corporate environment, but I have seen it happen.

</comment></comment></comment><comment><USER4> Now, I really do not consent with the terminology given in the article. Here's an alternative description:

In the old days of computer jargon a hacker would be someone who would be able to optimize the hell out of a code by exhibiting a crystalline beauty in his code at the same time. He would achieve his goals sometimes by unexpected means and ways. He would take pride in his code, which could not have been produced in an industrial fashion.

In the even as old debate of art vs engineering, an engineer would be the more bovine species. In reality a good software engineer is someone who doesn't focus just on the brilliance of code, but (also) on the aspects of its social production. (Is the architecture suitable to be broken up into programmers' tasks? Is the algorithm understandable? Is it maintainable? Often it's better to go for a more mediocre solution in terms of code efficience and rather have a reproducible and maintainable expression of the underlying ideas than some kind of mind twisting wizardry in your code base.) A software engineer is focused on the production of code as an industrial process.

A developer comes in all flavors, occupying any position in this continuum. He might be a hacker, but knows about the limitations of industrial processes. Generally, a developer is expected to be focused more on the task than on the social process of its production. He "speaks" his languages and knows the APIs by heart. You could say, he's centered on solutions, often encapsulating his knowledge and achievements in opaque libraries for the benefit of more earthly users.

And for the term hacker as used in the article, someone who's just poking around and not really knowing what he/she is doing? Isn't there a word like "script kiddy"? (Yes, the classic hacker was also poking around, but to be considered a true hacker, this would lead to supreme knowledge and insight in the system that would even transcend the ones of the system's designers.)

Not that this could be claimed to be more true in any way, it's just an alternative description. But as for me, it's rather a question of attitude than of levels of skills.

</comment><comment><USER5> This is all on a continuum, so I think these labels overcomplicate this. All of us started at the "bang on things until they work" stage, whether it was in 1985 with a C64 or 2013 a web tutorial.

A person can be in multiple stages at once (expert in backend design, clueless about Cocoa, whatever), but all software shares many core concepts and so experience helps with understanding new systems.

But nothing has really changed, becoming a really good software hacker/dev/engineer/whatever just takes a lot of time, a lot of _doing_ (sorry, reading books doesn't count IMHO). Some people top out at some point, but there's no shortcuts, you're still looking at 10K hours, like anything else.

Norvig had it right: [http://norvig.com/21-days.html](http://norvig.com/21-days.html)

</comment><comment><USER6> Are you a FOO?

We can't agree. As the very few people who have bothered to comment here have shown. And we are all FOOs or BARs or BAZzes. All of us!

Why it matters?

Well, it probably doesn't unless you have an agenda. I am not a "full stack 'web developer'" (hate me if you want but web dev isn't "full stack") nor an author of a marketing book. I don't have an agenda. I just have to post crap like this because I can't downvote the noise out of existence.

<comment><USER4> This article could have made some sense in terms of self-reflection à la "What's your attitude to code?" (See the alternative description below.) But as it is, it's just an exhibit of a single-minded attitude by itself.

</comment></comment><comment><USER7> I don't really agree with this. Someone could definitely be an engineer in one area of coding but have absolutely no clue when it comes to doing something else, but they could find code on StackOverflow and put a working solution together. Does that drop them back down to hacker? I don't think so...

</comment><comment><USER8> Considering we're on "Hacker News", is the OP trying to insinuate that we're all amateurs?

...

This is the only definition of "hacker" that should be accepted IMO:

[http://www.catb.org/jargon/html/H/hacker.html](http://www.catb.org/jargon/html/H/hacker.html)

And, for further reference:

[http://catb.org/jargon/html/introduction.html](http://catb.org/jargon/html/introduction.html)

</comment><comment><USER9> I think this definition of hacker is lacking and based on the wrong context.

Someone that 'hacks' at something is generally someone that is just trying to reach an end (e.g., copypasta).

However, when you look at a 'hacker' in a computer context, it's typically someone who can figure out how to push the boundaries or exploit a weakness in a given system.

</comment><comment><USER10> Back in the old times there were hackers and programmers.

Programmers had a degree and understood malloc and bitwise operations. They were engineers, but they were not "cool". "Programmer" wasn't a good word anyway, so they called themselves "Software Engineers". They worked for big companies, creating boring software for managing numbers and creating graphs in a fancy way. Yep, there was only IE4 back then and nobody ever thought that you could create JS script more than 100 lines, which does something good, so they had to learn and use Delphi, Visual C, etc.

Hackers were people that understood security flaws and exploited them ( also they were the guys that steal from someone's credit card and similar. ) Pretty much the hackers were those people who dropped out of school and didn't want to go back, because they hated programming complex stuff. This didn't make them non-experts. In fact back in those days hackers didn't need to work for a big company and made money with doing fancy network-routing kernel-hacking stuff for a local internet provider, buying / selling three-letter domains ( old times remember! ), creating and supporting websites for pirated software, MP3s, etc ( Imagine Morpheus' matrix team ... ) Hacker was more like a criminal. ( Remember the first movie, titled "Hacker"? )

Nowadays :

Now I see some different perspective here. You got your CS degree for a couple of years and you see that the technology from your uni is obsolete. Yep, C, C++ are here for good, but if you want to deal with Web applications and web development you'll have to know Zepto, Backbone, Angular, LESS, SCSS and nothing of this is old enough ( and perhaps will never be ) for university.

So in summary ( IMHO ) :

Engineer for me is someone who does low-level programming ( C, ASM, C++, etc. ) and knows what Hz is by definition. Developer (web) is someone who develops some stuff and don't predict Memory flaws and doesn't do flow-charts for most of his work ( Although, he does some testing :D ). Hacker (nowadays) is a Developer on the edge - He is a developer, but also wants to enhance his work into an art. ( writes plugins, frameworks, etc. )</comment>


Ask HN: Got hacked on Instagram possible due to a vulnerability. How to proceed? - <AUTHOR> With my 5+ years of experience on HN, I'm fairly certain this is not the right place to ask this but I need to minds of the people here. And, to be honest, if this catches the attention of a Facebooker, even better.
The gist of it is, my Instagram account got hacked. I have no idea how it happened, the hacker claims it was a vulnerability with Instagram. They changed my username (which is a common Turkish first name, so a bit valuable to some people) to something else, deleted my photos and also created another, new, account with my username. I've tried the proper channels, tried to make my case but got no where. I'm not even sure if they've read what I've wrote.
I've detailed everything (with screenshots, archive.is links and original copies of emails on Github's Gist) on Medium since it's the least boring way I could think of: https://medium.com/@batuhan/i-got-hacked-and-i-dont-think-instagram-cares-fe4160364ef1#.1u2hu7k1w
I'm not sure how to proceed. Any ideas?
Also the title was going to be "Ask HN: I got hacked on Instagram (possible due to a vulnerability) and not sure how to proceed" but got limited by the 80 chars limit. I'm sorry if sounds weird. <comment><USER2> I helped a family member to get access back to his instagram account which also got hacked and got his username changed. What we did was follow the instructions in [https://help.instagram.com/contact/740949042640030](https://help.instagram.com/contact/740949042640030) and kept in touch with the instagram staff via email. They kept asking various security questions during email and finally sent a recovery link.</comment>


Electric buses are now cheaper than diesel/CNG - <AUTHOR> https://electrek.co/2017/02/13/electric-buses-proterra-ceo/ <comment><USER2> Busses are a bit of a perfect storm for going electric:

They are heavy and stop and go a lot, which is ideal for regen as they slow, and electric motor torque as they pull off again.

They run standard routes, which lets them plan refuelling with some certainty.

They're used heavily, which means low fuel costs and low maintenance costs add up faster.

They're owned by businesses that are happy to invest up front if they can calculate that the above will break even within a certain timeframe and start to pay off.

They're used in city centers where pollution is a hot topic, with diesel being banned by cities etc.

<comment><USER3> One of the worst thing they produce is just ridicilous amount of noise and vibration. New buses in London are awesome, can't wait more places to adopt them.

</comment></comment><comment><USER4> I'm scared to think it, but I suspect we'll see battery powered buses and trucks banned from high security (ie airports) and valuable infrastructure (ie bridges, tunnels) over worries about the explosive potential of their lithium batteries.

The Proterra buses (company quoted in the original link) look to have 1000s of pounds of battery in a bus. Judging by the ferocity of a laptop/phone battery burning if the bus' batteries could be maliciously burned it would be an absolute inferno.

<comment><USER5> Gasoline powered vehicles are allowed in those places and they do indeed turn into an absolute inferno when they combust. Heck, they even allow compressed natural gas vehicles in those sorts of places and they can actually explode.

If we are talking malicious, releasing any combustible gas in an enclosed area can cause a building levelling explosion.

As a culture, we have gotten used to life with super combustible stuff. Batteries might actually be a significant improvement.

</comment></comment><comment><USER6> Alright TFL, your turn...</comment>


Feedback on BlogPost DataBase Engineering for B2B2C Startups - <AUTHOR> https://himangshu.io/blog/database-engineering-for-startups/ <comment><USER2> This is good, thanks for writing. We keep facing challenges on tuning and maintaining postgres at scale: read-replicas, sharding, analytics over postgres data, complex joins, etc. In short, how to get the right balance on cost, redundancy and speed for large complex database with jsonb and relational data. Any experience / pointers on this?</comment>


Go 1 Released - <AUTHOR> https://groups.google.com/forum/?fromgroups#!topic/golang-nuts/fVonEtwNSFc

<comment><USER2> The discussion: <https://news.ycombinator.com/item?id=3766874>

</comment><comment><USER3> Awesome news! A great job by all involved.</comment>


SQL vs. noSQL – the right solution - <AUTHOR>

    SQL bitches because of this situation; imagine that 2 users were accessing the database and while one was reading a list of id's in one table and joining them to a list of names with corresponding id's in another table another user was modifying the list of corresponding names to id's in the other table.

    so nosql tries to solve this by basically using only the locks of update and read per "table" or "collection" call (meaning they have no JOINS and they have plenty of hard drive space) they do this by storing the "oh I need to look up the _id to get that name" directly in the first table or collection. nosql basically says let's fragment everything up into tiny databases and handle the locks at a higher level, like at the API between 2 or more parties so that 50 people aren't accessing something at once anyway. you have to admit that does seem prone to error

    the issue is that then if you have a table with a million rows storing the same data there's no point in using the relational part of a database

    what I do not understand, is why can't they just pass along a function allowing the user to lock and unlock their own database? Then the user just needs find, update and delete and if they wan't to join in any crazy way they can dream up, they just do it in the data loops (they can store it locally in a big loop while locking)

    that is why db.lock() and db.unlock() exist in sdb, you only need to use them if this type of situation were to arise
 https://github.com/andrewhodel/sdb <comment><USER2> OMG check out the crazy license: [https://github.com/andrewhodel/sdb/blob/master/AH- LICENSE-V1](https://github.com/andrewhodel/sdb/blob/master/AH-LICENSE-V1)

Good luck with that.

<comment><USER3> I am gonna go read the "content" right now. Who knows what I'm going to use it for :D</comment></comment>


Ask HN: trying to use Kickstarter for Design for Hackers Book tour - <AUTHOR>

The HN community has always been a big help to me in the past when I wasn't sure what to do, so hopefully this will be a similar case.
My book, Design for Hackers: Reverse-Engineering Beauty is due out in about one month. I've been preparing for launch with various ideas, one of them being a Kickstarter campaign to help fund a book tour, which would start in September. Only problem is, Kickstarter rejected my first campaign. When I asked why, they said, simply:
> Kickstarter is primarily focused on creative arts projects, not the marketing of books or other products -- look around the site and you'll see what I mean. I understand what you're looking to do here, but it isn't what we're focused on.
But when I look around, I see there have been several other book tours funded by Kickstarter:
* Live, Work, and Play Like a Liberal: http://www.kickstarter.com/projects/280586197/justin-krebs-living-liberally-book-tour
* The Internet of Elsewhere: http://www.kickstarter.com/projects/1731685895/the-internet-of-elsewhere-european-book-tour
* Urban Scouts Book Tour: http://www.kickstarter.com/projects/13979723/urban-scouts-book-tour
But, I noticed that these campaigns focused more on the overarching mission of the books, rather than on the books themselves. So, I revamped my proposal, in the form of this video: http://www.youtube.com/watch?v=5WGNCk4ClzU
I submitted this about 5 days ago, and haven't heard a thing from Kickstarter since. They got back to me quickly the first time, but I feel like they may be ignoring me.
So, I'm not sure what to do. It would be great to have a campaign, not only to help fund my book tour, but to get the word out about my book. So, I guess amongst my questions are:
* Have you done a Kickstarter campaign before? Is there anything I should know?
* Any ideas on why they may be rejecting me?
* Any feedback on my video?
* Is there another platform I should be using? Should I just dig in and spend several thousand dollars funding my own tour?
Thanks for your help! <comment><AUTHOR> Here's a link to my current proposal video for easy clicking: <http://www.youtube.com/watch?v=5WGNCk4ClzU>

</comment><comment><USER2> Get rid of the handwriting story and start with the Apple part 30 seconds in.</comment>


More options do not equal happiness - <AUTHOR> http://www.npr.org/2013/11/15/245034685/are-we-happier-when-we-have-more-options?ft=1&f=1007

<comment><USER2> Its not that hard to see why. Reminds me of a Feynman anecdote where he said that as a college student he was so frustrated with having to choose dessert from the menu that he basically decided that he would have chocolate cake everyday and that solved that particular problem.

I've been noticing something similar in my lunch patterns, although with a twist: I tend to go to the same place for weeks at a time, everyday. And then one day, I just can't go there anymore. Just like that. Then, I look for another place...

Ultimately, I think this is a very subjective thing: its really upto each one of us to realize what kind of tendency we're prone to. Listening to oneself- really listening- is what has made life just a bit more enjoyable</comment>


Mark Zuckerberg's manifesto for Facebook offers a social dystopia - <AUTHOR> https://www.bloomberg.com/view/articles/2017-02-17/mark-zuckerberg-s-manifesto-for-facebook-offers-a-social-dystopia <comment><USER2> Have we reached peak Facebook yet? I started using Facebook quite early in my country and used it mostly as a social network, communicating and exchanging stuff with friends from all over the world. A couple years later I deleted my account, being disgusted by the potential abusive potential of all the information Facebook had. I came back years later as it became THE tool for ad hoc social initiatives and a way to follow news from things of importance to you, like the local climbing gym or a band I like. Though I did not use it as a social network, I nevertheless used it. That is currently changing and I experience Facebook fatigue.

The comment sections are either empty, used as a notifier for friends or are right-wing/left-wing troll battle fields. Everyone seems overly emotional to get the most likes and bubble to the top. I removed subscriptions for newspapers to not accidentally have to stumble upon the inanen comments, something I dreaded only with youtube comments so far. Have the social network aspects of Facebook (and youtube) been destroyed by fatigue, other ways (WhatsApp?) of exchanging stuff immediately and ideological troll battles?

<comment><USER3> If Google Trends is somewhat right, we've definitely reached peak Facebook: [https://trends.google.com/trends/explore?date=all&q=Facebook](https://trends.google.com/trends/explore?date=all&q=Facebook)

<comment><USER4> This is likely more indicative of society:

A. Becoming more computer-literate and going straight to sites as opposed to always Googling it before clicking, even once familiar with the URL, which won't correlate to usage

B. Visiting the site enough for AutoFill to take effect, which is ever-so- slightly inverse in correlation in terms of search popularity to site popularity

Here's a FB-related search term people will still use, even with AutoFill for Facebook, as some evidence. The rise is a similar pattern, but lacking the major drop: [https://trends.google.com/trends/explore?date=all&q=Facebook...](https://trends.google.com/trends/explore?date=all&q=Facebook%20contact)

<comment><USER5> [facebook] was the most common search query when I was at Google (roughly the period covered by this graph), and [facebook login] would alternate between #2 and #3. Neither of your options seem likely at all to me - over the time I was there, I witnessed people becoming _more_ likely to navigate to sites via Googling them rather than clicking, not less. The trend is even more pronounced with mobile, where basically nobody types in a URL, they use voice search and speak the name of the site.

I would bet on the Facebook mobile app being a major cause, though. Instead of hitting the web version at all, they're opening the mobile app.

<comment><USER6> Do people really voice search for things like that? Aside from drivers going hands-free, I have never seen a colleague or friend use voice commands where it wasn't just for the novelty.

<comment><USER5> I do, and I've heard a bunch of my friends do it. On Android voice recognition is both fairly reliable and really easy, so why not?

<comment><USER6> Yeah it absolutely is reliable and easy. I just haven't seen it catch on among my circles. Interesting.

<comment><USER7> IME, the first people in my friend group who started doing it were the ones who weren't insecure about looking "uncool" (so a combination of unapologetic techies and people without low self-esteem). Afaict, that's the main reason that people don't use a feature that would otherwise save tons of time.

<comment><USER8> I'm not afraid of being seen as an uncool geeky, but I would never use it as I don't like to broadcast what I am looking for to all my neighbors, even when I am alone I prefer silence, typing now requires basically the same amount of time.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment> temp-dude-87844 This is disingenuous critism that reiterates canned talking points, while failing to cover much of the manifesto's content. Zuck's document in question is actually fairly substantive and raises some intriguing questions that Facebook's leadership has to grapple to retain relevance in a diverse world that isn't all fairies and unicorns, but where people actually oppose each other politically, culturally, and along other axes.

While he frames it in terms of being a good actor as opposed to making a profit, I can't fault him for this in what is essentially a PR post. At least it acknowledges common criticisms of Facebook's moderation, content policy, and editorial behavior, and displays an awareness that hurried knee-jerk hotfixes won't allay all concerns, but that they need a strategies to stay relevant.

I'm no fan of Facebook the product, or their business model being an elaborate data harvesting scheme, but place criticism where it's due, not on long-form PR blog posts that admit they fucked up a few times and they can do better -- even if they play up examples where FB being in the right place at the right time with the right marketshare has has helped people.

</comment><comment><USER9> While I live in Silicon Valley and mostly agree with the prevailing morality, it's alarming to see Facebook (and others like Reddit/Twitter) move so aggressively towards social engineering the entire world.

<comment><USER10> Arguably, Facebook has been very cautious on how it moves towards social engineering the world, though. Which is what has allowed things like Cambridge Analytica to do so instead. The whole point of this manifesto is not "lets take over the world!", it is "we have a huge influence in the world, that much is a fact, let us take some measure of responsibility about it". Could there be a better alternative to Facebook being the one which has this power? Sure. But that's not for Facebook to change. The best you can hope is them taking their current power seriously and trying to wield it responsibly and that's what the manifesto is about. You want to take that power from them and build something better... well, feel free to give it a go.

<comment><USER11> I agree that Facebook doesn't socially engineer users as much as it could, but I think this is more a testament to its immense power than its kind intentions. Facebook is no stranger to unethical behaviors—its actions only seem ethical in comparison to what is possible with that amount of power. Remember a couple years ago when Facebook published a blatantly unethical psychological experiment that manipulated the emotions of unconsenting, unaware users? Zuckerberg didn't think of it as a shady A/B test to keep private within the company, he allowed it to be published in PNAS.

Let's not forget, Facebook isn't exactly being exploited by shady actors like Cambridge Analytica—it's profiting from them.

[https://www.nytimes.com/2014/06/30/technology/facebook- tinke...](https://www.nytimes.com/2014/06/30/technology/facebook-tinkers-with- users-emotions-in-news-feed-experiment-stirring-outcry.html)

[http://www.pnas.org/content/111/24/8788.full.pdf](http://www.pnas.org/content/111/24/8788.full.pdf)

</comment></comment></comment><comment><USER12> > The algorithm prioritizes what it shows a user based, in large measure, on > how many times the user has recently interacted with the poster and on the > number of "likes" and comments the post has garnered.

FB has changed so much for the better for me since I've joined an AutoRetro group featuring cars at least 25 years old and since I've started like-ing that group's posts. Now almost half of my feed is filled with photos of old Trabant, Lada or Opel Kadett cars, and I love that. The other half is indeed filled by mothers sharing their kids' stuff, which I don't give a crap about, and some fiery political stuff, which I care about but which I generally ignore, the reason being that there's not that much that I can change, politically-wise, by commenting on the Internet.

I've also found out that I've been a lot more relaxed and generally better off since I've stopped checking my feed on the phone when in public places (tramway, waiting in line at the Post office or at a general store). For those situations I always carry a magazine (the Economist folds really well) or a pocket book with me, and it's been for the best.

<comment><USER13> This sounds a lot like what I tell people who don't like using reddit. I love using reddit because I follow the subs that are related to my interests and as a result I find a lot of really, really awesome content. I think if you approach a massive social network as a passive or casual user you will be subjected to worst that network has to offer.

<comment><USER14> Even in the hobbies, particularly sports, subreddits I see a lot of narrow mindedness that I don't see in other forums for the same activities. Like asking how to do X type of cycling, the top comment will be some exhortation on how you must do ABC with Z bike or you will die. Versus bikeforums.net, where people will chime in with a more "anything goes" attitude, and seem to have greater depth and breadth of experience.

<comment><USER15> Indeed. I had plenty of positive experiences on Reddit, but many subreddits are very chaotic relative to how popular the subject is and who ended up there. The voting system just doesn't scale well in my opinion.

</comment></comment></comment></comment><comment><USER16> I think The Register's take does a way better job of describing this manifesto.

[https://www.theregister.co.uk/2017/02/17/zuckerberg_publishe...](https://www.theregister.co.uk/2017/02/17/zuckerberg_publishes_worldsaving_manifesto/?page=1)

</comment><comment><USER17> >> If you type "how to leave" into the Google search window, "how to leave Facebook" will be the first suggestion.

Am I being too critical for thinking someone writing an article like this should know that Google searches / suggestions are personalized? Just because its suggested for them does not mean its universal.

<comment><USER18> You're not. It really annoys me when people cite google search suggestions as meaningful.

In my google search suggestions, it falls behind "how to leave a group chat" and "how to leave a meetup group". Therefore it must be true that more people are trying to figure out how to get out of group chats or break it off with their meetup group than leaving facebook. This also must be a sign of the demise of group chat.

<comment><USER19> Mine:

> how to leave a group text on iphone

> how to leave a google review

> how to leave a review on etsy

> how to leave a group chat

<comment><USER20> Love me my ad/cookie/tracking blocking. I get:

> how to leave facebook

> how to leave a club in lol (??)

> how to leave ashran (??)

> how to leave a discord server (??)

Seems Google has me pegged as a gamer... (I'm not, had to DDG all the suggestions marked with a question mark)

</comment></comment></comment></comment><comment><USER21> Not to be overly melodramatic and totally dodging the contents of the article, but aren't we already in a social dystopia? Is there any way of qualifying "how dystopic" a society is?

<comment><USER22> "an imagined place or state in which everything is unpleasant or bad, typically a totalitarian or environmentally degraded one."

where the hell do you live? remind me to never visit.

<comment><USER23> Probably the US! /s

</comment></comment></comment><comment><USER24> Like all megalomaniacs, Zuckerberg fancies himself as some kind of messiah. He won't stop believing that, not even after his machine explodes in all our faces.

<comment><USER25> [https://news.ycombinator.com/item?id=13673691](https://news.ycombinator.com/item?id=13673691)

El Rag agrees with you.

</comment></comment><comment><USER26> To play the devils advocate, the criticism of the article is misdirected. None of the problems mentioned were created or exacerbated by facebook. Addiction : just like any other addiction , filter bubble: people not making friends on the other side, right winger's followers: the shunning from mainstream media brought that.

Facebook makes the most obvious choice of algorithms. An alternative choice of algorithms (e.g. deliberately exposing you to views you don't like) would create a much bigger backlash.

Anyway facebook has a long history of "huuuge outcry" every time they make a change, but its users have the attention span of a fruitfly.

</comment><comment><USER27> > _In France, rationalist Emmanuel Macron has 165,850 likes, while far-right > Marine Le Pen boasts 1.2 million._

"Rationalist"?? What's rational about him? The guy did not have any political existence 6 months ago, has no party, has no program, tells everyday the opposite of what he told the previous day because the audience is different, and yet gets more than 20% in opinion polls. That's a _rationalist_ , uh?

<comment><USER28> The only thing on your list that has anything to do with rationalism is this: "tells everyday the opposite of what he told the previous day," and it's entirely rational.

If you want to persuade someone, telling them what they want to hear is an essential first step. It would be irrational to do othwise given his goals.

</comment></comment><comment><USER29> Sure, but if you name the solution to this problem "virtual identity suicide" (I had to look it up too) you're not going to get many adopters. That's like naming marriage "single status suicide". It's not even accurate. What things are named matters a lot because most people cannot tell the difference between the name and the thing named nor can they easily remove implied yet unintended meaning from text.

<comment><USER30> I agree; it's a terrible name for it. I also googled it and found a website whose lead image is a hangman's noose – seriously, come on. Let's call it online identity liberation, retaking, protection, or whatever.

</comment></comment><comment><USER31> I have stopped using Facebook as a source of information, unfollowed all friends and pages and stopped posting about me eating outside (I did post about my travels which I'm planning not to redo). After a while of doing that, I don't feel any urge to visit facebook and check again. I even get no more urge to see my friends profiles and what is going on with them.

However, I have found it is not practical to remove Facebook because I use Messenger to talk with friends (either chat or voice). Much easier and cheaper than doing it with text (and it's way too easier for international friends). I removed the Messenger App from my phone though because it is abusive. I'm trying to find a way to communicate (P2P) with friends without facebook but it is too hard to convince them to install something else.

<comment><USER32> I have the exact same feelings.

FYI you can deactivate Facebook without deactivating messenger. That is what I did. My messenger still works (although oddly, sharing links with friends has become a little worse ) and my Facebook profile is deactivated.

</comment></comment><comment><USER33> [https://www.facebook.com/help/224562897555674](https://www.facebook.com/help/224562897555674)

</comment><comment><USER34> Why is it that every little single-purpose-at-best company nowadays acts like they are out to save the world in the most noble way possible?

Mark, please! You're a spam-your-friends-with-fake-news-and-baby-photos service at best. The world will go on long after Facebook ceases to exist. Please stop pretending that you're Mother Teresa here.

<comment><USER35> It's the tech delusion. I don't know a start-up that doesn't have some grandiose vision of themselves as the future saviors of humanity. Uber, Tesla, Facebook, Airbnb, you name it... it's all the same "save the world" rhetoric.

The scary thing is, I think a lot of people on the industry actually believe their own BS...

<comment><USER5> It's much easier to do hard or risky things (and convince others to do hard things) if you believe that doing so will save the world.

Whether it's true or not, it's a useful illusion. People who believe that it's all meaningless tend to sit on message boards and shit on others instead.

<comment><USER36> Hey, some people sit on messages boards and shit on others AND manage to build successful businesses that let them live the lives they want. I'd rather choose them as models than the douchebags drinking kombucha in their Tesla.

(i <3 u 'idlewords)

<comment><USER37> Linus Trovalds come to minD :)

</comment></comment></comment></comment></comment><comment><USER38> I bless whoever hides those substantive titles in the URLs.

<comment><USER39> Did you kill your own comment?

It was marked [dead], not [flagged]... I just vouched for it to reply, I'm a bit surprised that users can hide a mod's post...

<comment><USER38> I did kill it, because even though I'd marked it off topic (which ranks it lower), it was a poor way to start the thread.

<comment><USER39> Makes sense :-)

</comment></comment></comment></comment><comment><USER40> You made a throwaway to post a huge defense of facebook? Color me skeptical.

Edit: Correction, you are a sockpuppet, as you admit to in your 1st post, pointing out its primary use to manipulate discussion. Go away troll.

<comment><USER38> You can't attack other users like this on HN, regardless of how wrong you think they are. We ban accounts that do so, and already warned you about it twice. Please fix this.

We detached this comment from [https://news.ycombinator.com/item?id=13672409](https://news.ycombinator.com/item?id=13672409) and marked it off-topic.</comment></comment>