Show HN: Lightweight Threads, Channels and Actors for the JVM - <AUTHOR> http://blog.paralleluniverse.co/post/49445260575/quasar-pulsar <comment><USER3> Ignorant newbie here, but would love to hear views on this: I always treat with great skepticism claims that you can implement an inherent operating system function (eg: threads) on top of said operating system more efficiently than can be done by the OS itself. Usually it means the implementor simply didn't understand the next level down (eg: how the kernel works) and therefore couldn't tune it to their needs. But they understand the next level up extremely well. And there's nothing wrong with this, especially since one is platform independent and the other is (usually) very tied to specifics.

The one thing that seems evident to me is that native threads, in Java, all require a stack frame and this consumes memory. At some point millions of threads will, if nothing else, require gigabytes of memory for stack space. However in this era when the kind of computers that are likely to run these applications can easily have hundreds of GB of memory, I'm not even sure if that is an inherent limitation.

So to tldr; - can someone give me the insight, what is it that makes this more efficient at the language layer than the kernel layer? Why can a high level language magically scale to millions of threads and the OS can not? What is it that allows this?

<comment><USER4> I don't disagree with other answers, but I believe the situation can be described more easily: it isn't the same primitive, so, it isn't actually the case that someone is attempting to provide the same thing but faster: the OS is giving you "pre-emptive threads", whereas these alternatives are giving you "cooperative threads".

The argument is that for restricted use cases "cooperative threads" (which are the "dual", in a mathematical sense, to "evented" execution) are going to be faster than pre-emptive threads (which would require locks around even very short shared data usage, due to the unpredicability of the scheduler).

If the OS provided true cooperative multitasking, maybe it could do it faster, but that's something that has been pretty much decided to be a flawed OS primitive between processes ("OMG Mac OS 9 / Windows 3.1" ;P), and within a single process may as well be implemented in userland with little performance loss.

<comment><USER5> GHC's runtime (an implementation of Haskell) uses pre-emptive scheduling for its threads and has no problem handling millions of lightweight threads.

<comment><USER4> This starts turning into a semantics problem. GHC is a compiler that modifies the code it has compiled to add "synchronization points" that are used under a cooperative threading model, allowing it to know with certainty that certain kinds of operations or even functions it detects to have certain properties will not be pre-empted. Given that the overall language semantics are then pure functional, the costs associated with pre-emptive scheduling are removed, but again this is only because they "cheated" and didn't build a real "preemptive" scheduler: tasks must cooperate.

In fact, there are trivial kinds of operations you can perform (such as involving FFI) that simply will never pre-empt. The primitive the operating system provides, which I maintain is a fundamentally different primitive than what people are building in these user-space modifications, is "no matter what you do, whether on accident or on purpose, whether with benign or malicious intent, you will be time-sliced; your time-slicing will thereby happen at the discretion of the system, and you will not be trusted to request or demand excessive modifications to your time". GHC is not some magic exception: it is still cooperative multitasking.

</comment></comment></comment></comment><comment><USER6> Selective Receive sounds great. Any idea how to handle messages that continue to pile up behind your actor when they're never handled? Do they get culled somehow after a period of time? If not, how do you handle the inherent memory leaking where every actor piles up messages that were never handled, and wastes processing time by replaying them every time you do handle a message? Works okay when you have lightweight processes that are completely independent, like in Erlang - on a monolithic process like the JVM, not so much.

Also, with the lightweight threads using CPS - how do you prevent the kernel from deciding to do some housekeeping tasks on your core? Using APIC or something in Linux to assign the JVM process exclusively to cores so you're guaranteed no interruptions? User-level hardware affinity is not exactly the JVM's strong point.

<comment><AUTHOR> Regarding selective receive: the messages aren't replayed whenever a new message comes along. The receive operation keeps a pointer into the queue to the last message scanned. Whenever the inner receive returns, the outer receive continues to scan the queue wherever it left off. Now, in general it's a good idea to use bounded queues so messages don't pile up indefinitely. When the queue overflows, the queue's owning actor (the receiver) will get an exception. When it gets the exception, it will either want to terminate or flush the queue.

If you need affinity, I recommend Peter Lawrey's Java-Thread-Affinity library (<https://github.com/peter-lawrey/Java-Thread-Affinity>).

<comment><USER6> If you're not replaying unhandled messages, you're not doing selective receive. To quote LYSEFGG, "Ignoring some messages to handle them later in the manner described above is the essence of selective receives" (<http://learnyousomeerlang.com/more-on-multiprocessing>). Erlang also doesn't limit mailbox size, so while it's great that you offer bound mailboxes (which is also great for performance since they can be array-based), it's not quite as flexible. And since you haven't begun to implement supervision or OTP, you'll have to handle failure as well when you break your bounds.

I'm a big fan of Martin Thompson's Mechanical Sympathy concepts, and I'm very intrigued in Peter Lawrey's work with Chronicle as well. That said, that hardware affinity library relies on native C code, and you better know what you're doing when you put it in. The topology of the CPUs and locality mean you have to be smart in your assignments, lest you end up message passing via QPI/Hypertransport between sockets at a latency of ~20ns/message. Point being, either be intimately familiar with your box and reconfigure for each kind on which you deploy, don't ever use a hypervisor, or pin and pray.

Are you able to introduce bulkheads and failure zones with your lightweight threads via CPS? If not, isolation of dangerous tasks on a thread that could impact other actors could be an issue. Akka does this by allowing you to specify what thread pool (preferrably forkjoin-based) you want to use for each actor.

Look, this is neat stuff you're doing. I'm not concerned that you don't like Scala, but Akka can be used from Java as well so that's a non-argument. It's merely another approach. And while you certainly CAN block in an Akka application, there are plenty of tools for asynchronous coding in Scala (Futures, Async) to help you avoid that and only block when you absolutely must.

<comment><AUTHOR> The skipped messages will be replayed in the "outer" receive. Obviously, selective receive has its drawbacks, but it's part of what makes Erlang simple, and it can significantly help in modeling complex state transitions.

And yes, you can assign a fiber to a ForkJoinPool of your choosing (although I'm interested in what a "dangerous task" may be).

<comment><USER6> I agree that using selective receive helps in dealing with messages that arrive out of the order of a specific state transition. Akka gives users the ability to stash messages if they want to. On the JVM, a long-running actor- based application (which is one of the reasons for using actors in the first place) can struggle with it. It's one of the reasons the original Scala Actor library is no longer in use, though there are other important reasons - <USER2> as Akka's use of ActorRef, analogous to Erlang's PIDs, which mask the instance of an actor from those who wish to communicate with it, as well as it's physical location. As you scale actors across a cluster of machines, that becomes really useful.

That's great about assigning the fiber to a FJP. A dangerous task would be anything that could take down an actor, which can be worrisome depending on what state the actor is holding. There are varying kinds of such state, including that which can easily be retrieved again from an external source, that which is "scratch" data and inconsequential if lost, and that which cannot be recovered if lost. In actor-based applications, we want to encapsulate mutable state and use message-handling single-threaded interaction to prevent concurrency issues, right? If we're going to do something that could cause the actor to fail and risk losing data, we want to export that work along with the data needed to perform the task to another actor and let IT fail rather than risk the important one. There are ways to pass such data between incarnations of an actor on the JVM by carrying it with the Exception, but it's not free and you have to know when to use it.

So a dangerous task could be asking for data across an unreliable network or non-replicated source, it could be dividing by 0, anything that could cause typing errors (even in Erlang), you name it.

<comment><AUTHOR> But how would a dangerous task affect the entire pool?

Also, I don't know if there should even be "important actors". Like in Erlang, we want to let it fail. Important data should be kept in a shared data structure that supports good concurrency, not in actor state. Like I said in the post, I don't think every aspect of the application should be modeled with actors.

<comment><USER6> With a thread pool shared by actors, even yours, if one of the actors fails, that thread is gone until the pool creates a new one (as needed). That's one less available thread until the recreation occurs. To minimize the impact on other actors, you put known dangerous tasks on their own small pool so that their probable thread death has no impact on others.

What you're not seeing is the relevance of a supervisor hierarchy and OTP. Yes, you want to let it crash. But you want isolation of failure as well, and only with failures of increasing criticality do you want it to be escalated through the hierarchy. There is a difference between a database call failing because a SQL command failed and all database interactions failing due to network partition. OTP via Erlang and Akka allow you to model that in your actor tree.

Important data kept in a shared data structure? Globally visible? Managed with what, STM? That won't fly at scale - STM is great only when you're dealing with small datasets that don't change very often. Immutable, persistent data structures? Also not good at scale due to fixed size allocations constantly happening as structural sharing is enforced. Allocations are cheap and hopefully the objects are short-lived and GC-friendly, but it's still far from a free ride.

The whole point of actors is a concurrency abstraction. They are meant for isolating mutable state from being affected by multiple threads at the same time. OTP and supervision is just a nice way of organizing them and learning when failure occurs on another thread.

Should an entire app be modeled with actors? Probably not. A subsystem certainly can be. Depends on what you're doing, of course.

<comment><AUTHOR> How would a failed actor (huh :)) take down the thread? All exceptions thrown by the FJTasks tasks are caught.

The shared data structure was a reference to my previous post, not to STM: <http://blog.paralleluniverse.co/post/44146699200/spaceships>.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Am i the only one who had to smile at the sentence "At Parallel Universe we develop complex data structures and distributed data grids, which require a lot of low-level programming, so I do most of my work in Java."? :)

Also, i wish they would have some Java code on the page? As i understand it's available for Java as well? I love the actor model, but i have no intention to learn clojure.

<comment><AUTHOR> Quasar is Java (Pulsar is a thin Clojure API to Quasar). There's no documentation yet (there will be soon), but the project page directs you to some examples.

All the code examples in the post are in Clojure because I wanted to demonstrate how the Erlang model is fully implemented, and the Clojure API easily mimics Erlang's. The Java API doesn't have pattern matching, and so would make it harder to see the resemblance to Erlang.

But as good as Java is for low-level, high-performance code, and even though I don't find its verbosity to be problematic in the least, Clojure is a beautiful, elegant language worth learning even if only for its concurrency and state-management philosophy.

<comment><USER8> I think the OP was smiling at the notion of Java as low-level. It's anything but.

</comment></comment></comment><comment><USER9> How does this compare with <http://code.google.com/p/jetlang/> ?

How does this work with garbage collection? Is the GC per-process ("fiber"), like in Erlang?

<comment><AUTHOR> Jetlang doesn't offer lightweight-threads. It uses an event-driven processing of messages (like Akka), so fibers can't block and you can't do selective receives.

The JVM's GC isn't per actor (I know actors are called processes in Erlang, but let's keep the nomenclature consistent), but its GC is extremely advanced, and some implementations work on a per-thread basis. The ramifications are that we can't offer the same level of isolation as Erlang, at least not on HotSpot. An actor could theoretically produce a particular kind of garbage that will cause a GC pause to the entire system. But other than isolation, the JVM is very performant (much more than Beam), and handles concurrency extremely well.

I don't understand your last question (on load distribution).

<comment><USER9> Re: distribution, I just deleted this question from my comment. I had not payed attention to the item in "next steps" in your post which mentions Galaxy.

I'm excited to see how you guys go about trapping errors and such, as you mention in the "next steps."

Thanks for answering my small questions.

</comment></comment></comment><comment><USER10>
      There have been several attempts of porting actors to the
      JVM. Quasar and Pulsar's main contribution — from which
      many of their advantages stem — is true lightweight
      threads[1]. Lightweight threads provide many of the same
      benefits "regular", OS threads do, namely a single, simple
      control flow and the ability to block and wait for some
      resource to become available while in the meantime
      allowing other threads to run on the CPU. Unlike regular
      threads, lightweight threads are not scheduled by the
      operating system so their context-switch is often faster,
      and they require far less system resources. As a result, a
      single machine can handle millions of them.

[http://blog.paralleluniverse.co/post/49445260575/quasar- puls...](http://blog.paralleluniverse.co/post/49445260575/quasar-pulsar)

Excellent area to contribute to. In 2006-2008 there was Kilim, which uses some code-rewriting to accomplish similar greenthreading on the JVM to support an actor system with extremely lightweight lock-ree message massing.

      Kilim comfortably scales to handle hundreds of thousands of actors
      and messages on modest hardware. It is fast as well – task-switching
      is 1000x faster than Java threads and 60x faster than other lightweight
      tasking frameworks, and message-passing is 3x faster than Erlang (cur-
      rently the gold standard for concurrency-oriented programming).

from [https://github.com/kilim/kilim/raw/master/docs/kilim_ecoop08...](https://github.com/kilim/kilim/raw/master/docs/kilim_ecoop08.pdf)

Kilim: <https://github.com/kilim/kilim>

<comment><USER11> fwiw, he did in fact mention Kilim in the footnotes. Sriram also chimes in on the comments.

<comment><USER10> His point about Kilim being a monolithic solution is well taken- getting all three of these right (from both the end-user perspective and transformational perspective) is hard!

      (i) ultra-lightweight,

cooperatively-scheduled threads (actors), (ii) a message-passing frame- work (no shared memory, no locks) and (iii) isolation-aware messaging.

There's a stackoverflow thread on continuation libraries for the JVM. There's some coverage of the unnamed coroutine library in in Quasar-

<http://stackoverflow.com/a/4687050/72070>

Thanks for the note swannodette, I'd missed the reference.

</comment></comment></comment><comment><USER12> Could you enumerate your specific perceived shortcomings of akka that you allude to in blog post?

<comment><USER10> Elsewhere in this discussion-

      Jetlang doesn't offer lightweight-threads. It uses an
      event-driven processing of messages (like Akka), so fibers
      can't block and you can't do selective receives.

<https://news.ycombinator.com/item?id=5646097>

Akka relies on operating system threads- when you block in Akka, you block in real life.

<comment><USER13> According to this Akka document - <http://doc.akka.io/docs/akka/1.3.1/scala/dispatchers.html>

"Akka supports dispatchers for both event-driven lightweight threads, allowing creation of millions of threads on a single workstation, and thread-based Actors, where each dispatcher is bound to a dedicated OS thread."

I also, would like to see the perceived shortcomings of Akka, since lightweight threads can't be the problem.

<comment><AUTHOR> Akka calls them lightweight threads, but they really aren't as they can't be blocked. In short - they're not implemented as continuations.

Basing the implementation on real lightweight threads gives you selective receive and other goodies mentioned in the post, while maintaining the API simple. I think Quasar/Pulsar are much simpler than Akka, and they will stay simpler for said reason.

All in all, Akka feels a lot more complicated than Erlang. Also, Scala isn't everyone's cup of tea, and Akka doesn't mesh well with Clojure.

Quasar tries to join the power of Erlang with the power of the JVM. Pulsar tries to join the beauty and elegance of Erlang with the beauty and elegance of Clojure.

<comment><USER12> All well and good, another measure of "lightweight" that is often quoted is a little over 300 words of overhead/erlang BEAM process and 300 bytes/akka actor, do you have comparables for Quasar?

<http://www.erlang.org/doc/efficiency_guide/processes.html>

[http://doc.akka.io/docs/akka/snapshot/general/actor- systems....](http://doc.akka.io/docs/akka/snapshot/general/actor-systems.html) (300 bytes: way at the bottom

<comment><AUTHOR> Quasar actors consume even less memory. An idle actor occupies about 500 bytes.

</comment></comment></comment></comment></comment></comment><comment><USER14> [http://thornydev.blogspot.com/2013/01/go-concurrency- constru...](http://thornydev.blogspot.com/2013/01/go-concurrency-constructs- in-clojure.html)

Michael Peterson has also done some good work implementing go-style concurrency in clojure

</comment><comment><USER15> The subtitle is a better fitting title:

"Lightweight Threads, Channels and Actors for the JVM".

</comment><comment><USER16> Interesting ! Regarding to your own Queue implementations, did you consider using the disruptor (<http://lmax-exchange.github.io/disruptor/> \- which is actually an advanced ring buffer)? Martin Thompson was also involved in that project.

<comment><AUTHOR> Yes. I've been asked that elsewhere. See my reply here: <http://www.java- gaming.org/index.php/topic,29466>

</comment></comment><comment><USER17> I am newbie to go, but running the go version took about 186.053167ms, wonder how to explain this behavior <http://play.golang.org/p/flK5QV-mDC> Go Version : devel +740d244b2047 Thu May 02 18:59:39 2013 -0700

<comment><AUTHOR> What was MAXPROCS set to? It's a lot faster to run this particular benchmark with only one thread.

<comment><USER17> 1

<comment><AUTHOR> Yeah, that's what I figured :) Set it to the number of (virtual) cores on your machine.

</comment></comment></comment></comment><comment><USER18> I didn't see anything in there about ensuring that the messages passed between actors are immutable. Did I miss it?

<comment><AUTHOR> It's not enforced by Quasar, and Java, obviously can't ensure that, but in Clojure everything is immutable.

<comment><USER18> Ah, thanks for the clarification, I missed that Quasar was aimed at Java, which threw me off. (Apparently I can't be expected to read the first sentence carefully.)

After enjoying the benefits of immutability and lightweight message passing, I'd hate to give up the former -- but if you're stuck with Java, I suppose all this is gravy.

<comment><AUTHOR> You're not "stuck with Java". Sometimes it's the best tool around. In any case, Quasar is the foundation. Pulsar wraps it with a nifty Clojure API. Perhaps we or someone else will come up with APIs in other JVM languages (I have my eyes on Kotlin).

</comment></comment></comment></comment><comment><USER19> Looks cool, but what's the distribution story? I'm not sure I understand the comparisons to Akka without one.

<comment><AUTHOR> We intend to provide distribution on top of Galaxy (<http://puniverse.github.io/galaxy/>).

<comment><USER19> Is Pulsar + Galaxy + Zookeeper + presumably some new code/project still simpler than Akka? It sounds kind of complicated.

<comment><AUTHOR> Galaxy doesn't require Zookeeper (it's an optional dependency). And Galaxy isn't there just to support Quasar/Pulsar. It's there to support a distributed, concurrent, consistent in-memory database. Actors are just part of the story.

To simplify, Quasar/Pulsar + Galaxy is, in Erlang parlance, like Erlang + Mnesia or Erlang + Riak (only with a consistent database that assists in parallelization)

<comment><USER19> Cool, thanks for clarifying pron. Looking forward to giving it a spin!

</comment></comment></comment></comment></comment><comment><USER20> Great work Ron!</comment>


Ask HN: Remote Storage Client API Idea. Any Thoughts? - <AUTHOR> I have an idea for an open source project and want to see what people think here on HN.
This is a project to encourage data freedom - separating who is supplying your web app with who is storing the data. The data storage could be Dropbox, Google Drive, Your local HDD (with a browser extension), a self-hosted storage, IPFS maybe etc.
This will also encourage and perpetuate use of FOSS on the cloud - because you can use a suite of FOSS applications, e.g. a todo list, a calendar, a text editor, a code editor, and link them all to your preferred storage solution, which itself could be FOSS or Propitiatory. It also lowers the bar for app developers who no longer need to run a server at their own expense and risk.
This will be achieved by exposing a simple client-side JavaScript API for storing data remotely.
This API would let the developer of an app, e.g. a text editor say, call this to save data, open data and discover what data can be opened. The app doesn't care about how the data is stored. It would be similar in feel to using localstorage.
The API itself would then require registering of plugins for whatever storage providers you want to use. So there would be a plugin for Dropbox. The app developer chooses which plugins they want to add, but typically I imagine there being a standard bundle of popular providers, including https://remotestorage.io/ which then let's you self-host a server.
If you find that apps aren't including your favourite storage host, you can get around this with a chrome extension to register that when it detects a site using the api.
I'm undecided but this might include encryption options, or maybe that is a separate concern.
For authentication, there will be a default UI for telling the user they need to authenticate, e.g. with Dropbox and handling the tokens, but that will probably be overrideable to fit in with the branding of the app.
Any thoughts? <comment><AUTHOR> Also just to mention [https://remotestorage.io/](https://remotestorage.io/) has the same ideals, but I think it is flawed in terms of adoption because as a user you have to find somewhere to store your data that implements the remotestorage.io API on the server side. And really there is only 5apps doing that. So now you are having to administer your own server, or use 5apps beta product with a 1Gb limit.

This idea allows you to hook up any online storage with any API, and will encourage developers to offer a wide range of options. I want to include remotestorage.io as an option because I like their being a self-hosting option with a well written standard. But on the other hand I want people to use the damn thing so having the major providers is important. And with encryption you could prevent them from spying on your data.</comment>


Ask HN: Is a tech background necessary to found tech startup? - <AUTHOR>

The vast majority of tech startups that are successful are founded by tech savvy people. More than a few of them attended some of the top educational institutions.
My question is, is it possible ("likely" is a better word, anything's possible) for a non-tech oriented person to bring forth the next big thing?
I am extremely business oriented (studied international business, minored in spanish, concentration in entrepreneurship) and have what I believe to be a great idea that I am currently working on, but I feel my lack of tech knowledge leaves me at a huge disadvantage for several reasons.
I am outsourcing all of my design, programming, etc and handling the business with a partner. I want to bring a programmer on board at least part time to compensate for my lack of knowledge. I felt it would be beneficial to get this community's opinion on the situation. <comment><USER2> It depends how serious you are about this venture.

I think it's pretty important to at least have a technical co-founder if you want to start a startup. Otherwise, you're starting a business in a field where you have no domain knowledge.

If technology won't be your competitive advantage, what will it be?

<comment><AUTHOR> Thanks for your response.

This venture is my life until it fails which hopefully won't be the case. However, I know the statistics of success are not on my side especially if I don't launch with the right ingredients.

The idea is a tried one, but there is no one successful platform that has done it right in my opinion. It is a "stuff to do" in a particular location type of thing but with a niche market and a different slant taken on. It won't be messy, and it will basically bring the characteristics and culture of certain areas to virtual life. Listed businesses will pay.

I must update the site daily (having a CMS built for me to edit), but it will be expanding to other areas at a rapid rate. This is the reason I feel the need to bring on a programmer and give that person stock in the company. I just don't know exactly what I am looking for in that person.

<comment><USER3> If you're truly passionate I think you could devote say 2-3 weeks completely to learning as much as you can about the technology that you'd potentially use.

You do not have to be technical in the sense of writing code. But knowing what those programmers are doing is invaluable.

Tons of great start up founders completely suck at coding, but they know what their people are doing, they can tell them what to do, what to fix, how to fix it. Think an army general. He might not be a good soldier, but he knows what soldiers need to do.

The only other route is to have a technical co-founder that you ABSOLUTELY trust. Otherwise you're in for a risky ride. Not very different from any industry to be honest.

<comment><AUTHOR> I have a great deal of admiration for the coders and designers I have already worked with and many of the people on this site, simply because I don't get exposure to that level of intelligence and passion on an everyday basis where I live currently.

I would like to take your advice, and devote the next month to learning as much as possible. Can you point me in a direction to get started? I have done a good bit of sponge learning by reading HN daily, but I want to get into the details. What resources do you recommend?

<comment><USER3> It's so hard to answer really. All people have such differing levels on knowledge and most of the time it's a crazy mix.

If you know nothing about coding you might want to at least learn how to read most basic code, just look up introductions to some programming languages, you'll quickly figure out how it all works on an intuitive level.

Then you could actually go straight ahead and start thinking about your start- up. Based on features you'll have identify technologies you'll need to use and then try to find out how to achieve that functionality using those technologies. You'll need to be really comfortable with Google. Always look everything up. If getting through one tutorial requires you to open 20 others - so be it.

Too many people are looking for complete introductory texts that will take you through the whole process step by step. It just doesn't work that way. Books are very tempting for that reason. You can just pick it up and read the whole thing, but well, it feels easy for a reason.

</comment></comment></comment></comment></comment><comment><USER4> I'm not sure how you expect anyone here to answer that question... We know nothing about you or your idea but you want us to tell you how likely it is you'll have the next big thing???

I will say that if you don't know anything about the technology behind your product (providing technology is your main product and not in a supporting role) you're at a HUGE disadvantage.

</comment><comment><USER5> Hackers for hire are (generally) much more hit-or-miss as far as capability (dedication really) goes. This is kind of a worse-case, but just think of all the government websites out there that are nearly unusable. It's because the coders have no stake and just put in their 8 hours. Stake in the outcome is what makes a person create something great. For example, I'm typing this at my day job instead of working on my projects, but over the weekend I worked like a machine for about 12 hours without a break on my current venture. And that's because I had other obligations and couldn't afford to put in more time.

I recommend bringing in a tech guy and giving him something to own.

<comment><AUTHOR> Very good point, thanks</comment></comment>


PulseAudio under the hood - <AUTHOR> https://gavv.github.io/blog/pulseaudio-under-the-hood/ <comment><USER3> It would appear that I'm one of the few fans of pulseaudio here. Although I've only started using it since version 9, it always worked fine and we can do quite complex workflows easily. An example scenario:

1\. We have multiple incoming RTSP stream where the audio is added as pulse audio streams.

2\. We mix a couple of these streams.

3\. We send this stream to an external echo cancellation device.

4\. We take back the output of the echo cancellation device.

5\. We mix some more streams into it

6\. We route this to a certain output, which can be dynamically changed according to a certain algorithm.

We control PA using DBUS and the above scenario is accomplished with only a few calls. Granted, there's some latency you can't really control, but all in all it's an incredible powerful system that's been working really well for us.

<comment><USER4> Seconded. When Pulse works, it's really magical. Like when you go to the hackerspace, connect to the Wifi, and the room speakers appear in your mixer and Just Work.

<comment><USER5> So, this is an honest question, not an attempt to be cruel: How exactly do you get that to happen?

Because my reaction when I read the linked article was that pulse sure does seem to have a lot of features that sound pretty useful, but after years and years of nominally having it on my system in charge of my audio hardware, I have, to be blunt, absolutely no clue how to use any of those features, except a bit about network audio streaming. None whatsoever. Didn't even have a hint the support for those autoconf protocols existed.

I did once try to stream a Pulseaudio stream from one linux system to another. I never got so much as a peep to go across. I have no idea where any diagnostic messages may have gone that might help me debug this. I have no access to a working configuration to compare to. I have no idea what I did wrong and no idea how to fix it. I can find documentation that assumes you're writing C extensions and I can find documentation on how to slide sliders in the Gnome volume app, but I can't find anything in between. And I'm a professional software engineer with a minor in electronic music; there are certainly people with more knowledge and more motivation on these matters than me, but on the flip side, features that I can't figure out or get working might as well not exist to the vast majority of the population.

So while I'm not asking you to write a manual page, how exactly did you get to the point where you can do that? Again, I'm serious; the previous paragraphs are not to just slag on a project, but to show where I am and what problems I'm having. I've got a project I'm trying to do where it would be really useful to understand these things, but I have no idea even where to look at this point. (I've poked in every Google search I can think of and gotten the aforementioned C-API level docs or "I just installed Ubuntu, how do I volume?" docs.)

<comment><USER6> PulseAudio (PA) is modular, and you can load new modules implementing new functionality at runtime via `pacmd` (and presumably other clients/config tools).

One of these modules that come with any standard distribution of recent-ish PA can use avahi/zeroconf (probably in part because avahi was Lennart P.'s previous focus of attention, before he started work on PA) to advertise PA sinks on the network. As a consequence, running the avahi daemon is required for PA network-wide advertising of its presence to work, and auto-discovery to have any chance of working at all. Another module implements accepting PA-via- TCP compliant clients via TCP. Both are included in PA's standard distribution, if it's recent-ish (think 2012 and later). Distros still might package them in extra packages; the Debian does so for the zeroconf-parts in a package named "pulseaudio-module-zeroconf".

To load the TCP transport support module and specify a primitive ACL (based on source IPv4 addresses - you need to adapt this ACL to your local environment if it uses another IP range!), you can use this `pacmd` stanza:

        load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16 auth-anonymous=1

(A presumably more secure, cookie-based authentication mechanism with a shared secret involved is also available, but I've never used it.) This will make pulse open a listening TCP socket on port 4713. At this point, remote hosts with PA-ready applications should already be able to play back sound by setting the PULSE_SERVER environment variable to the accepting PA server's address - what's still missing is the avahi-based advertising of the service.

So, to make PA contact your system's avahi daemon and use it to advertise its sinks on the network, you load another module into your PA instance:

        load-module module-zeroconf-publish

If both these operations have succeeded (`pacmd` will complain loudly if they don't), a quick `avahi-browse -a` on a (avahi-enabled) host in the same network as the one with your exposed PA server in it should yield something like this (pasted from my local network):

        + enp0s31f6 IPv6 pulse@nas                                     PulseAudio Sound Server local
        + enp0s31f6 IPv6 pulse@nas: Jukebox                            PulseAudio Sound Sink local
        + enp0s31f6 IPv6 pulse@nas: Dummy Output                       PulseAudio Sound Sink local
        + enp0s31f6 IPv4 pulse@nas                                     PulseAudio Sound Server local
        + enp0s31f6 IPv4 pulse@nas: Jukebox                            PulseAudio Sound Sink local
        + enp0s31f6 IPv4 pulse@nas: Dummy Output                       PulseAudio Sound Sink local
        + enp0s31f6 IPv4 root@tv                                       PulseAudio Sound Server local

That is two hosts advertising PA sinks on the network - "tv" (running libreelec) and "nas" (running Debian).

Now, when you make another avahi-enabled host on the same network load the "module-zeroconf-discover" PA module, the advertised sinks should magically show up in that PA instance's list of available sinks. You can then move streams onto them with any of the standard utils, like pavucontrol.

If you've found a set of stanzas that set up your PA instances to your liking (with modules loaded the way your setup requires it), you can make them re- apply on daemon startup by persisting them in your user-specific rc files in ~/.config/pulse/.

Hth! :)

<comment><USER5> In addition to the upvote already granted, I wanted to publicly thank you for trying to answer my question, because I love it when other people are polite this way. Thank you.

<comment><USER7> So, basically impossible for normal people.

</comment></comment></comment></comment></comment></comment><comment><USER8> I've never been a fan of PulseAudio, and always remove it and replace it with Jack on my Linux DAW systems, so this article wasn't really of interest to me .. until I started reading it. I think its the first time I've actually had any respect for PulseAudio as a framework .. but I'll be darned if I'm going to ever try to use it again. Jack just works so much better and with far less fuss and overhead .. still, I'm yet to see a "Jack under the hood" article nearly as impressive as this one.

<comment><USER9> > _but I 'll be darned if I'm going to ever try to use it again_

You probably won't have to. I think the long term plan is for Pipewire to replace PulseAudio (and be an alternative to JACK). Pipewire also does video. The initial release of Pipewire is video only with audio support to come:

[https://blogs.gnome.org/uraeus/2017/09/19/launching- pipewire...](https://blogs.gnome.org/uraeus/2017/09/19/launching-pipewire/)

[http://pipewire.org/](http://pipewire.org/)

[https://github.com/PipeWire/pipewire](https://github.com/PipeWire/pipewire)

<comment><USER10> > I think the long term plan is for Pipewire to replace PulseAudio

No that's not it at all. It's a framework that will use Pulseaudio OR Jack. Jack is only for low latency needs AKA Professional audio production.

"Pipewire is used to build a modular daemon that can be configured to: be a low-latency audio server with features like pulseaudio and/or jack.

[https://github.com/PipeWire/pipewire/wiki](https://github.com/PipeWire/pipewire/wiki)

<comment><USER11> What about that quote makes it seem like it will use pulse audio or JACK rather than acting as a replacement for them?

<comment><USER10> Checked on their Freenode channel. They are looking at not total replacement but will replace certain features.

</comment></comment></comment></comment></comment><comment><USER12> It took me about a month of on/off attempts to get audio to stop routing through HDMI every time my desktop came out of suspend and I still have a basic understanding on how the audio system works on my machine. While I praise the open source community for everything they've done it's still really hard for even an advanced user to understand how things work. Its flabbergasting at how it has reached this situation.

<comment><USER13> That's odd. I found my Linux system always got HDMI audio right while Windows always got it wrong. I seem to recall I was able to force VLC to go to the right place by adding it to a config file, but the system sound never did work right on Windows...I had to manually select HDMI every time it got plugged back in.

<comment><USER14> You had the wrong default selected in Windows mixer.

Need to select it as default when plugged and whenever it gets replugged it retake its priority. Works as expected with multiple default / temporarily plugged devices.

Interface might need a bit of a clean up though.

<comment><USER13> I think it was a buggy driver more than a Windows problem, as I tried selecting it as the default. It sometimes wouldn't show up when re-plugged in, as well. I'd even have to reboot sometimes to get it to show up as an option.

</comment></comment></comment></comment><comment><USER15> Just a note that PulseAudio maintainer Tanu Kaskinen is on Patreon [1]. He publishes monthly notes on PulseAudio changes there first and wouldn't mind people supporting him via Patreon.

[1] [https://www.patreon.com/tanuk](https://www.patreon.com/tanuk)

</comment><comment><USER16> Ugh, the annoying PulseAudio that sometimes makes your volume suddenly much louder or much softer when you want to change it by just one notch, just because it wants to try to be "smart" with different applications or whatever thing I don't care about it is that it tries to do, there should be 1 volume slider and it should work correctly period (and without lag - another thing PulseAudio introduced).

Oh how I miss the simplicity and elegance of before PulseAudio (and its evil twin "hi-let-me-put-your-text-logs-in-a-binary-format"-systemd) appeared in ArchLinux.

<comment><USER17> The issue with the volume is one of your desktop environment, not of PulseAudio.

</comment></comment><comment><USER18> PulseAudio posts are always filled with naysayers; the vast vast vast majority of users (like systemd in this regard) have no idea it's even running and just get on with whatever they're doing.

I've primarily run Linux over the last fifteen or so years and barely had an issue that's _directly_ PA's fault.

I remember the bad old days where a playlist would finish and then GAIM's notification sound would bleat fifteen times. PA saw an end to that.

<comment><USER19> Firefox stopped supporting ALSA, so I had to install PA. PA gives me: a noise chirp when the PA daemon starts, which is probably some uninitialized garbage buffer. Sometimes (I don't know what triggers it, seems to be random, and no, it's not the auto-suspend module which is on by default but seems to cause a similar bug for many people) audio starts to lag by .3-.5 seconds. Restarting PA does not help; have to reboot, which I can't/won't do for days at a time. This is supposed to be a Linux system, not Windows 98.

I don't hate PA. On another machine it was always installed. But it is quite clear to me that it is yet-another layer on top of the existing infrastructure, so it _statistically_ will cause more issues than just the infra that's there already.

<comment><USER4> The problem with PA is that (it appears like) there aren't really any simple errors. For most software, you have a bunch of common problems that you can find on Stackoverflow easily with a reliable solution.

Pulse, on the other hand, while working fine on 99% of systems, usually fails catastrophically in creative ways on the remaining 1% and it's really hard to even understand what the problem is. (And of course, these 1% will shape public opinion. A large portion of the 99% is not even aware they're using Pulse.)

<comment><USER20> Two nines isn't very many nines. I've had problems with PA 100% of the time. Must be me, right? The only PA solution I know is purging it from my system.

<comment><USER21> what people mean when they say the vast majority of people dont have problems is "I don't care about your objectively broken experience"

</comment></comment></comment></comment></comment><comment><USER22> I use headphones, and have tactile transducers on my chair. The transducers make the audio sound much louder than it actually is. That is good for your ears and your neighbours.

Because of this setup I need full-range stereo output on my headphones and low-passed LFE for the transducers.

How can I do this PulseAudio? When I enable lfe-remixing, I get full-range output on my transducers and I hear voices in my chair. If I set lfe- crossover-freq, I lose the bass on my headphones.

I found this patch

[https://pw-emeril.freedesktop.org/patch/171424/](https://pw- emeril.freedesktop.org/patch/171424/)

which seems solve the problem, but it was rejected.

<comment><USER22> I'd like to add that the patch was rejected because the maintainer had a use- case in mind, deemed the feature not a good solution, and therefore rejected the patch.

I would comment directly on the site, but because the certificate is invalid, I cannot register an account.

I don't like the attitude to reject a patch just because one can't come up with a use-case. Obviously there is a use-case, else the patch wouldn't have been developed.

Also, the feature would be hidden in a configuration file that is meant for advanced configuration anyways.

On top of that, I have a AV-receiver that does support all of this bass management. For every channel I can configure individual crossover frequencies, and I can but don't need to use a subwoofer. Why doesn't PulseAudio give me these freedoms?

Why would a free software developer deny others easy ways, or any ways at all, to configure their system? This is equivalent to the walled-garden approach of many closed systems. Why does this occur in free software?

<comment><USER23> > Why would a free software developer deny others easy ways, or any ways at > all, to configure their system?

Because of the "drive-by contributor" problem. Come by, drop off a patch that solves exactly your problem, never show up again to maintain the feature, even if it breaks, even if it's been broken for years.

That forces me, the developer, to either continuously test your patch (which I may not be able to do if I don't have your hardware/software/configuration/use-case-in-mind), or to shrug and hope it works. We have to just trust your initial work and have it no way weigh in on the future of our product?

We've learned too much as Open Source Software Engineers to just trust random drive-by contributions. We've gone from default-accept-all to default-deny, because at the end of the day that's what keeps quality in our software.

</comment></comment></comment><comment><USER24> He writes: _A rich API provides methods for inspecting and controlling all available objects and their run-time and persistent properties. This makes it possible to replace configuration files with GUI tools. Many desktop environments provide such tools._

That is wrong, if I don't misunderstand it. It does not matter much for the possibility of GUI tools whether they talk to an API or whether they parse and write configuration files. That is stuff you abstract away.

It is of course possible that pulseaudio allows settings to be set that didn't exist before. It's API might be better for that - but that doesn't say you couldn't do the same with writing to configuration files if they had the same capabilities, like targeting a specific application (one of the use cases he mentions below).

<comment><USER25> There is a difference. Writing to config files doesn't set properties at runtime.

PulseAudio needs to allow UI tools to set properties with sub-second latency.

And just reparsing the configs every time something is changed would be extremely wasteful.

<comment><USER26> Why do you need sub-second latency for something you're unlikely to do more than once a year?

<comment><USER25> Because I change parts of the config via the UI many times a day. In my case, because I have multiple audio cards and need to change several attributes.

<comment><USER24> That's minuscule compared to how easy it is to parse config files vs to construct and speak to API. The volume slider UX is a better argument. That's the one thing I can think of where faster changes are indeed useful.

<comment><USER25> It's not volume sliding, but close to it. Having a button to move a running audio stream from speakers to headphones to network playback on my phone is amazing.

</comment></comment></comment></comment></comment></comment><comment><USER27> Sigh.

Once upon a time, sound cards were files in the /dev tree. To play sound, you wrote pcm data to the file representing a sink. To record, you read pcm data from a file representing a source. Things were better then. I'm sure there are people with use cases that have required the four (and counting!) solutions crufted on since then, but I've never been one of them, and it irks me that the interfaces get more and more complex and brittle with each iteration.

<comment><USER28> I think the use cases you're describing are quite distinct from a "Linux on the desktop" user. The audio experience for this kind of user (myself included) has improved dramatically in the past few years.

<comment><USER27> I'm a desktop Linux user; I preferred the old way. I do get that most people like multiplexing (I don't; I want exactly one sound source at a given time), and I'll grant that has improved.

I banged my head against my desk for a couple of days when Slackware switched to Pulse with 14.2, allegedly because it was needed for bluetooth. I still have difficulty believing that people actually use bluetooth for audio, but apparently some people love it.

<comment><USER29> > I still have difficulty believing that people actually use bluetooth for > audio

So you don't believe that somebody would like to be able to use wireless headphones?

<comment><USER27> Exactly. Why would you trade something that doesn't require power, has the most reliable, secure, and lossless transmission channel known, and is "configured" by plugging in hardware for something that requires power, has a less reliable transmission channel that can be easily snooped or forged, has to be configured in software? I literally don't understand why anyone would ever choose the latter.

<comment><USER30> I want to own exactly one wireless headset/microphone so that I can get up from my computer without having to excuse myself from voice chat.

</comment></comment></comment></comment></comment></comment><comment><USER31> I've grown to really like PA. Originally I did not like PA because I thought it used more system resources over raw ALSA since it obviously came with a daemon running the background.. What I didn't know was that the libraries that applications used to interface with ALSA had all computation for sound mixing done in userland. So in a real world example, your audio player app using raw ALSA might use 10% of your cpu while playing audio. But using the pulse backend would cause your audio app to use 2% cpu with the pulse daemon using 3%. So its actually using less even though it is not obvious.

Once I started using PA, I kind of went crazy with it and started trying to add PA support to old linux software that was still ALSA only. The library and docs were not hard to use. The PA framework is all reference counted as well so when you create the pa-objects in C, you never really need to worry about memory allocation. It was pretty neat. Unfortunately, before I had all my commits and patches ready, I changed jobs and never got the free time to commit them the rest of the way.

</comment><comment><USER32> Loads of complexity. I don't see the value.

Just give me files I can write data into and suddenly everything becomes very easy. Everybody knows how to write files.

I know this discussion is getting really old but when Alsa was a step in the wrong direction, Pulse was the highspeed train in the wrong direction that followed, trying to "fix" it. This overengineered mess is the result of the tragedy allowing former Windows users to do systems programming for Unix like operating systems.

<comment><USER33> PulseAudio is the only audio system I have used that can stop recognizing output hardware (on the motherboard!) without a reboot. On the worst of its competitors, you can be assured that once you get it working, it continues to work at least until reboot, and usually until you change config or upgrade the wrong package.

<comment><USER34> I get that occasionally when putting my laptop to sleep with a HDMI cable plugged in, then waking it up with the HDMI cable unplugged. I've found killing the PulseAudio pid (systemd restarts it) usually fixes it. Weirdly trying to restart it properly through systemd doesn't work but YMMV

This is on ArchLinux running KDE4

</comment></comment></comment><comment><USER35> Thanks! This looks at first glance to be a useful guide for understanding Pulse. I plan on spending some time digging into it later.

Does anybody know if there's a similar such document for ALSA similarly written by someone who isn't an ALSA insider?

</comment><comment><USER36> Pulseaudio definitely needs to be demystified. As an average user it sometimes feels like black magic that sometimes doesn't do the right thing. But in recent years is been leaps and bounds better.

I'm not sure whether that's due to distribution maintainers giving very sane configurations or that pulseaudio development has been focusing on sane defaults.

Eitherway, if you're one of the people involved in giving me a audio experience on Archlinux/Fedora, please pat yourself on the back because you're doing fine work.

<comment><USER13> I've got 20 years of hating audio on Linux at my back, so it's hard to let go of the pain, of which a significant amount was contributed by Pulseaudio. But, I have to agree that we finally (as of a couple years ago) have a good audio experience on Linux. It's good enough to where I don't even think about it anymore. I can even use pro-oriented audio software effectively.

I can also use old devices that don't work on Windows, anymore, of which I own several (a keyboard and an audio interface I'd planned to get rid of, but don't really need to now that I can do most things under Linux). Which is kinda funny...now Linux is _more_ likely to work flawlessly with a given piece of audio equipment than Windows.

If only an official REAPER port would come along (I know it'll run under WINE, but there's also been rumblings of a Linux port for years, and I'd much rather run something that works natively)...

<comment><USER37> Reaper for Linux is already there. 100% native,no WINE required, and works great. [http://wiki.cockos.com/wiki/index.php/REAPER_for_Linux](http://wiki.cockos.com/wiki/index.php/REAPER_for_Linux)

<comment><USER13> Cool. I didn't find that last time I went looking for the current state of REAPER on Linux, but I did find blog posts that indicated it was being worked on. That's exciting news.

</comment></comment></comment></comment><comment><USER38> I've had mixed experiences with Pulse. Although kind of flaky, it has been super useful for me to handle audio from my Chrome browser that I run in a VM and display via X. I'm not aware of any other way to pipe audio across the network these days, other than the pulse tcp module.

</comment><comment><USER39> Related: "Launching Pipewire" [0], which is meant to (among other things) eventually replace PulseAudio.

[0]: [https://blogs.gnome.org/uraeus/2017/09/19/launching- pipewire...](https://blogs.gnome.org/uraeus/2017/09/19/launching-pipewire/)

<comment><USER40> GDIt. This, this is why Linux is not on the desktop. Constant CADT churn.

<comment><USER17> Like MMAudio, DirectSound, Kernel Streaming, WASAPI?

AudioTrack, OpenSL, whatever-the-Android-8-thing-is-called?

</comment></comment></comment><comment><USER41> I am quite surprised that PulseAudio has a bad reputation. I couldn't get ALSA working on Arch Linux, and simply installing PulseAudio resolved all my issues.

From the sentiment here I get the feeling that it might stop working any moment.

<comment><USER42> It's mostly historical - Ubuntu shipped it as the default when it was still unstable. This lead to a lot of people learning about it and lots of 'try killing pulseaudio if something goes wrong' advice.

The reality now is it is very stable and has a huge number of powerful features. Personally I think it is great, and have no issues with it.

<comment><USER43> Part of the problem is that the early releases were pretty bad - <USER2> even requiring patches that were only published in the Fedora package to work correctly (like, they literally hadn't upstreamed by the developers at all at the time). PulseAudio also didn't do bugfix-only releases, you either backported or waited for the next major release and hoped it didn't break anything else. They just released what I think is probably the first bugfix- only release in the project's history a couple of days ago. This certainly wasn't a case of the prior releases being so good they didn't need fixing either.

<comment><USER41> > PulseAudio also didn't do bugfix-only releases, you either backported or > waited for the next major release and hoped it didn't break anything else.

Haha, that is ridiculous!

</comment></comment></comment></comment><comment><USER7> Tentacles, all the way down.</comment>


Hackers Stole My Website – I Pulled Off a $30,000 Sting Operation to Get It Back - <AUTHOR> https://medium.com/@ramshackleglam/hackers-stole-my-website-and-i-pulled-off-a-30-000-sting-operation-to-get-it-back-143d43ee3742#.8rbqzgu39 <comment><AUTHOR> "And let me tell you: of all the surprises I've had over the past week or so, most surprising of all has been the FBI. They responded immediately, with follow-up phone calls and emails, an in-person interview with two special agents at my own home within 24 hours, and a follow-up visit from two agents yesterday. Beyond that, each and every agent I have interacted with over the past week has been, without fail, compassionate, thoughtful, invested, respectful, and committed to action…in addition to treating me not like a case number, but like a human."

It's worth noting how we only ever hear about when these entities are up to no good; I wish it were not 'surprising' when we find the gov. is doing great job, I'd hope that this is usually the case.

<comment><USER2> I thought the story was a good read. I agree with your comment. I also was surprised with the FBI response as well, but the media likes to focus on the negative. More so than the FBI response, the larger thing I took away from this story is the terrible password advice that was given and the author didn't even bring up two factor.</comment></comment>


Video Resurfaces Featuring Images of Hitler and Local GOP Party Chair Krvaric - <AUTHOR> https://www.kpbs.org/news/2020/aug/21/video-surfaces-images-hitler-and-tony-krvaric/ <comment><AUTHOR> Discussion at Reddit: [https://old.reddit.com/r/amiga/comments/iezlzz/i_sure_didnt_...](https://old.reddit.com/r/amiga/comments/iezlzz/i_sure_didnt_expect_to_see_an_amiga_demo_halfway/)</comment>


Show HN: Hacker News Title Edit Tracker - <AUTHOR> https://hackernewstitles.netlify.com/ <comment><AUTHOR> I built this several months ago as I was interested to see how the titles of posts evolve/change on HN. It turns out lots of titles are edited every day, for both better or worse, and it can be handy to see what a title _used_ to be.</comment>


Ask HN: What's up with the limits on viewing profiles? - <AUTHOR>

How come I can't view HN profiles of any members including myself, when I log out?
All I get is this: We've limited requests for this url. <comment><USER2> I'm not logged into HN on my work machine, and I have no problem viewing anyone's profile from there, including yours (just tried it now).

<comment><AUTHOR> Maybe it's just my internet connection.</comment></comment>


Are taller people smarter? - <AUTHOR> http://freakonomics.blogs.nytimes.com/2007/08/28/the-most-surprising-thing-i-learned-today/ <comment><USER2> (The following is an exercise in critical thinking, only shows one side of the issue, and does not reflect my opinion either way.)

Tall people don't earn "high" wages, they earn "higher" wages (only about $500 a year more according to recent studies.) And if the person is tall, and their kids are tall, $500 a year is likely not enough to cover the extra costs of food. If there should be a change, it should be that the government should pass a law that tall people should be paid at least $5,000 a year more, to cover bigger, non-entry level, non-Toyota or Honda sedans and SUV's, worse gas mileage, greater car expenses, and the price of size XL-Tall and 2XL-Tall clothing from specialty stores since regular stores don't carry tall sizes.

Why don't articles write about that? Everybody wants to point out that tall people earn $500 a year more, on average, but not the fact that shorter people come out on top. That extra $1 a day does not cover the extra food for one person, let alone a family, nor does it cover the greater car, specialty clothing, gas, car repair, car insurance, and other expenses whatsoever for even one tall person, nor their family.

A tall person may also use shampoo and soap much faster, and need to use more water in the shower.

If anything, the status quo encourages more short people to reproduce.

And, if taller people actually are "smarter" or more productive (for whatever reason, be it confidence or something else) then they're _really_ getting the short end of the stick by having to survive with $4,500 less yearly taxable income.

(I like to think from both sides of the issue, and I haven't seen that side addressed any time the issue has been brought up.)

<comment><USER3> Maybe tall people earn more because they need more...

</comment></comment><comment><USER4> Taller people are indeed smarter if you don't remove the malnourished from your sample. Useless information, one way or the other. It's sort of like...well, X race has a lower average IQ than Y race. As long as you're not shaping policy around the contrary, it doesn't matter at all.

</comment><comment><USER5> Napoleon was 8 or 9 feet tall after he got onto his horse. So it is about height! Or maybe drive & passion are more important... oh well so confused.

</comment><comment><USER6> From the comments...

>I went to law school. Everybody was short.

Yup, pretty much confirms it! :-)

</comment><comment><USER7> Hmm...the average height at MIT is definitely significantly on the short side, even across all ethnic backgrounds.

<comment><USER8> I think brain volume is what matters. I think there's a correlation between height and brain volume, but perhaps it's weaker in some races, particularly those where most people are short.

<comment><USER9> if this were true it would be hard to explain asia...

<comment><USER8> So the brain volume (not head size) is smaller in Asian people?

<comment><USER9> Maybe? The point of my smart ass comment was that a person's height or brain volume doesn't matter...

</comment></comment></comment></comment></comment><comment><USER8> I think this is related to the brain volume being larger for taller people. Another paper showed that larger brain volume results in smarter people.

[http://www.people.vcu.edu/~mamcdani/Big- Brained%20article.pd...](http://www.people.vcu.edu/~mamcdani/Big- Brained%20article.pdf)

</comment><comment><USER10> _Homo longus raro sapiens, at si sapiens, sapientissimus._

Now I wish I could downvote myself..</comment>


One Tether Trader Didn't Cause the Bitcoin Bubble - <AUTHOR> https://www.bloomberg.com/opinion/articles/2019-11-05/did-the-bitcoin-bubble-come-from-one-bitfinex-tether-trader <comment><USER2> From my perspective, watching the markets since 2013, the 2017 boom was caused by Ethereum. Before Bitcoin shot up, Ethereum had shot up from $8 in December 2016 to nearly $50 a couple months later.

Now, Ethereum is a novel innovation on blockchain tech. The smart contract hype was very real at the time. (For the record, I still think smart contracts have tremendous potential) ETH had navigated a fork, secured corporate alliances, setup several foundations to promote work and was starting to generate a lot excitement around projects like Augur, Ox, etc. Then on top of that, the ICO boom happened when several projects raised tens of millions of dollars. That caused a run on ETH.

ETH boomed and then BTC followed, at least for the 2017 boom. And then the speculators danced between altcoins, Tether, Bitcoin and ETH, trying to maximize their returns while paying little attention to fundamental adoption.

I think we've seen certain technologies take over markets very quickly in the past couple decades, like desktops and wifi and mobile and then smart phones and social media...that we've gotten used to rapid disruption in tech. However, with financial tech like blockchain and crypto, it necessitates slow adoption. Why is this? Because it's real money on the line. It's cool to move fast and break things when it's an app or a fitness tracker, but when it's significant amounts of money on the line, maturity, trust, and security are tantamount.

I still think blockchain will win in the long run against legacy tech. But it will be a slow disruption.

<comment><USER3> Bitcoin has smart contracts, and has for many years now. Ethereum's marketing for the phrase is kind of misleading.

Why the downvoting? Apparently a number of people haven't heard of Bitcoin Script, or are upset I pointed out this very factual item about Bitcoin? Seems somewhat odd.

<comment><USER4> Ethereum's smart contracts are obviously more developer friendly and easier to implement. Ethereum smart contracts are the go-to for dapps, despite having a significantly smaller userbase and market cap than bitcoin.

To say Bitcoin smart contracts are equal to Ethereum smart contracts would be akin to comparing Myspace to Facebook.

<comment><USER5> And MySpace was better all around in objective terms, but facebook was dumbed down for mass appeal so it won out?

<comment><USER6> This is a false narrative.

Facebook better optimized for the fact that most people are too stupid to avoid using full-page background images and auto-playing music.

<comment><USER5> I thought it was a lot cooler back then. People got their own customized little places about themselves, maybe with some fun media playing. Now it's all boring and sterilized.

<comment><USER6> It was a blessing and a curse.

The internet in general is probably "better designed" now, but also way more homogenized and boring.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Some great alternatives Tether and Bitfinex are MakerDAO and Uniswap. The first one offers a decentralised & transparent stable-coin called DAI. The second one is a decentralized exchange that is also 100% transparent.

These are transparent because they're running as programs on top of of a blockchain (Ethereum). Each and every state change is recorded and the systems can be audited in real-time.

The Maker DAI stablecoin currency is backed by collateral (Ether), and it's currently overcollateralized by about 350%. The system has been remarkably stable, even in the face of the bear market, which resulted on some crazy swings in the price of Ether.

DAI also has a few fiat on-ramps, including Coinbase and Kraken. You can also mint DAI yourself - there's a tutorial on Coinbase where they give you $20 DAI for free, [https://www.coinbase.com/earn](https://www.coinbase.com/earn)

What's more is that since these systems are essentially programs (they can be used and called by other programs as "library" ) which means that they can be used as lego bricks to build new things. Some examples are "Pool Together - [https://www.pooltogether.us"](https://www.pooltogether.us"), which is a no- loss lottery system. It combines MakerDao's DAI coin and a decentralized lending system called "Compound".

Please be mindful that all the above projects are still considered experiments and cutting-edge stuff. It will probably still take a few years to mature - however, a lot of new opportunities seem to be opening up in this area.

<comment><USER8> Are you saying Tether isn't run on a blockchain? Because it most certainly is.

The SEC crypto tsar recently had quite negative comments about MakerDAO at SWSX, as in they may be in breach of securities law. Something to note.

The decentralized nature still makes it far less riskier to the end consumer.

<comment><USER2> Well the Tether transactions are run on a centralized blockchain, but the underlying value of Tether is based entirely on trust in Bitfinex backing it with actual dollars.

As for Maker, I really don't know how the SEC would begin to shut it down if it wanted to. It's entirely smart contract driven and it's live on the Ethereum blockchain, which is truly decentralized. Surely we need to update securities law for the 21st century as I'm not sure the Howey test had blockchain era in mind.

<comment><USER8> Can't speak for the _centralisation_ of Omni, you have any more info on that? Know little about them, it's a word thrown around quite readily in the cryptoworld for various reasons. They present themselves as decentralised and were in the first wave of layer 2 cryptocurrencies. Tether tx's are anchored into the bitcoin blockchain somewhere along the line.

RE: Maker, certainly agree, just stating the situation. There's no chance of laws being able to keep up, it's a game of asking for forgiveness later for most. If something blew up quick enough and got mainstream adaption the law would bend for it (ie. Uber, AirBnb).

[https://decrypt.co/5940/secs-crypto-czar-stablecoins- might-b...](https://decrypt.co/5940/secs-crypto-czar-stablecoins-might-be- violating-securities-laws)

<comment><USER2> Well the exchanges that participate in the Tether blockchain each run a node or nodes. The transactions are cryptographically verified, so there's a common ledger between all these participating exchanges. But Tether has a couple theoretical weaknesses due to this setup. A quorum of exchanges could theoretically collude to manipulate transaction history or shut out other exchanges. And Bitfinex itself is the centralized holder of the USD backing Tether, so that makes it very vulnerable to any shortcomings in Bitfinex's accounting. Ultimately to cash out Tether the exchanges have to go to Bitfinex and request a fund transfer so they are a single point of failure for the Tether chain.

<comment><USER9> There are certainly some trust issues with Tether, but in this case I don't think that exchanges could easily roll back Omni transactions unless they were to fork the Omni protocol. Omni transactions happen on the Bitcoin blockchain - they are effected by extra data in otherwise normal bitcoin transactions. In order to roll back the Omni transactions you would have to either (1) roll back the underlying bitcoin transactions or (2) convince everyone who runs Omni nodes to update their software to your branch which discards the transactions you wish to roll back.

<comment><USER10> Option (2) has already happened. Tether got hacked and someone issued/transferred lots of coins to themselves. In response, the whole omni network was upgraded to blacklist these stolen coins!

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> On a ski trip I took in 2017, I was in line to buy a lift ticket one cold December morning. I remember overhearing the winter bros (the ones that usually talk about gnar and their steezy tricks) talking about installing Coinbase and buying Bitcoin.

I wouldn't underestimate the amount of retail investors that speculated on Bitcoin during that time. It was on major news networks in America, but also on national networks outside the U.S. My uncles and aunts were calling me asking how to buy Bitcoin outside the USA. The FOMO was real back then. Did Tether play a part in the grand pump? I'm sure it did, but I imagine it was more of a catalyst, and not the primary driver as the original study suggested.

<comment><USER12> Late 2017 was nuts. I recall my brother texting me "Hey should I buy XRP?" out of the blue.

Wish I had had the presence of mind to realize it was time to get out.

<comment><USER13> I can remember Bitcoin going to $200 thinking it was nuts.

I can also remember it going to $700 thinkin it was nuts.

Now it's over $9000.

So when was there really a reason to get out?

<comment><USER14> Well, in hindsight, $18k would have been a great time to get out.

<comment><USER15> You missed k__'s point which is that no matter what peak price you think was the best time to sell out, it has always been followed 2-3 years later by an even greater peak.

You have hindsight in the past but you are still lacking foresight into the future.

<comment><USER16> Because predicting the future based on the past has always worked well.

<comment> alch- And will always work well!

<comment><USER17> Hume on induction in a nutshell.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> Having been through that bubble, I'm fairly confident FOMO had a huge effect. Every single person I know was asking how to buy some. You can even see it on Google Trends[1].

It's possible that the very first initial bump was manipulated (and crypto is definitely manipulated each and every day...), but the crazy increase afterwards probably wasn't due to a single entity.

1: [https://trends.google.com/trends/explore?date=today%205-y&q=...](https://trends.google.com/trends/explore?date=today%205-y&q=bitcoin)

<comment><USER14> Next FOMO bubble is going to be exciting: it's getting much easier to acquire Bitcoin, so the conditions seem ripe for the next bubble to be even wilder. Keep an eye out for next spring, when Bitcoin block reward halves again.

(don't invest more than you're willing to lose _entirely_ it's very risky, but having skin in the game during a bubble is very fun in my experience and will quickly educate you in the emotionality of trading. Dollar cost averaging weekly seems like the best strategy: easy to feel dread at best entry points and greed at best sell points.)

<comment><USER19> How do you DCA?

<comment><USER20>
        // parameters: $520 to invest over 1 year

        for(i=1; i<=52; i++) {
          buy(10 usd);
          sleep(1 week);
        }

<comment><USER19> Yeah I know how DCA works. Just wondering on what platform you're doing it on.

<comment><USER21> You can do that on Coinbase. There is a blog post here [https://blog.coinbase.com/easier-recurring-buys-and-sells- on...](https://blog.coinbase.com/easier-recurring-buys-and-sells-on- coinbase-9a3cd7ea934e)

<comment><USER19> Feel like Coinbase fees are too high... even for Pro

<comment><USER2> You don't have to trade on Coinbase, you could just buy and hold on Coinbase and send it to another exchange if you want to trade.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> Thank you for bringing some basic logic back to the table.

People love to imagine that odd phenomenon have simple solutions. This whole "tether was the sole cause of the bitcoin bubble" theory is completely ridiculous.

Go into a random bar in December of 2017 and you would hear people talking about btc and altcoins...

</comment><comment><USER23> I was tired of hearing this crap!

This is when everyone finally heard about Bitcoin after the runup. And continued it until the overexuberance ran out of steam. Not like it's the first time that happened.

</comment><comment><USER24> > Perhaps the takeaway is that when banks refuse to do business with crypto > traders, or when a government bans trading altogether, it doesn't stop > traders from trading. It just forces them to find creative solutions. If it > were easy for crypto exchanges to use the traditional banking system, there > would be no need for Tether at all.

This is a point not many seem to understand.

<comment><USER16> The reason it's not easy is because of anti-money laundering/know your customer legislation - which directly contradicts the few currency uses Bitcoin has at this point.

</comment></comment><comment><USER25> [http://archive.is/dhAsU](http://archive.is/dhAsU)

</comment><comment><USER26> I find it difficult to defend Tether. I leave the investigation to regulators. But assume Tether team has good intention and try to do the right thing, it is easy to make mistake. Tether software may have had a bug that inflates Tether coin over reserve. This is a problem with permissioned money system. It is difficult to audit and verify transactions.

I think Libra is an improvement. They use open source software. But it is still a permissioned money system. There's room for error. Who would be responsible for the damage? I think every participants need to share the responsibility. I've advocated for a new category: decentralized and digital native crypto with constant inflation. Permissionless is a key feature. It provides many advantages over permissioned.

[https://bitflate.org/post/2019/11/05/tether-problem- highligh...](https://bitflate.org/post/2019/11/05/tether-problem-highlight- the-need-for-inflating-cryptocurrency.html)

</comment><comment><USER27> Tether sounds like the Federal Reserve's interface to Bitcoin.

</comment><comment><USER28> article titles are _topic suggestions_ to espouse pre-existing beliefs, exhibit a

yesterday had people saying "Aha! I knew it" alongside anecdotes that completely neglected the role of a crowd and media to support their fictional higher standard for a bitcoin pump over how literally any rally works

today has different people saying "yeah this makes way more sense" because of the role of actual distinct buyers. this article is just using its platform to surface that explanation higher

</comment><comment><USER29> The bitcoin "bubble" was caused by an invention in the ecosystem. Bitcoin was "stuck" for a long time around $300, because it is not much good @ 10 mins tx time. Then a solution was published, the lightning network whitepaper. A mere 5 days later volume exploded and a period of 6 months of accumulation occurred where price was contained by large bid / ask walls. Volume dropped off after this point and the price rocketed up. The ultimate destination was the joint mcap of visa and mastercard, which it would in theory now be able to compete with at some point, which worked out at 18k per coin at the time. The collapse afterward is due to the fact that it must be used in this way and at that tx magnitude to justify that valuation. Your basic buy the rumour sell the news variation. It might thus range around 10k for a long time. Whether those who accumulated used bots or tethers or both to drive the price up rather than it being organic price action is debatable, and it seems difficult to prove. What is interesting to me is how fast money went to work on this after the technical hurdle was overcome.

</comment><comment><USER30> There was no bitcoin bubble. Bitcoin is currently 50% down from the high mark. That is not a bubble. After actual bubbles, the low mark is may be 90% or more below peak.

<comment><USER31> Is the definition of a "bubble" invalidated if the stock goes back up some time after the crash? It did drop initially from $20K to a low of $3,200, which is 84%.

<comment><USER30> Yes it is. If you had invested in the stock market at the height of the """bubble""" in 2000 you would be off well now. In hindsight it was not a bubble. You may disagree but sadly you probably didn't have that perspective at the time.

<comment><USER2> I prefer "boom" and "bust" cycles rather than bubble, to describe these scenarios.</comment></comment></comment></comment>


Nightcode 2.0.0 released - <AUTHOR> https://github.com/oakes/Nightcode/releases/tag/2.0.0 <comment><USER2> For those who are wondering, some screenshots are on the project's page: [https://sekao.net/nightcode/](https://sekao.net/nightcode/)

<comment><USER3> those rainbow parenthesis are awesome! now I gotta find an atom package that does the same.

edit: found it [https://atom.io/packages/swackets](https://atom.io/packages/swackets)

<comment><USER4> Careful with that. While working, that package in particular is pretty hacky. Atom doesn't have APIs yet to make implement rainbow parenthesis "the right way".

Source: Atom forum. Tried to implement one myself.

</comment></comment></comment><comment><USER5> > "Nightcode is written with Swing, a deprecated UI framework. We're gonna > replace it with Java FX. What do you got Rock?"

Wait, Swing is deprecated? That's news to me. I just rewrote a small GUI app in Java with Swing.

Any good resources for getting started with JavaFX? Looks like it can't use native controls...

<comment><USER6> I think it's that Swing isn't deprecated _per se_ , more that it's unofficially deprecated by the fact that JavaFX is actively being worked on and pushed onto potential Swing users, while Swing just sort of stagnates.

<comment><USER7> I thought someone told SWT was dead too, but I checked the project page and they're still going. Last stable was a year ago, but latest dev release came out this month.

</comment></comment></comment><comment><USER8> Best. release notes. ever. :)

</comment><comment><USER6> This write-up is _amazing!_ Dear everyone reading this, from now on, please have more of a sense of humor and playfulness like Zach, instead of the self- important and dry stuff that typically gets posted here. This is literally the only post on HN that I read in its entirety in _years_.

<comment><USER9> Some people might find it entertaining, but I'd prefer at least a little clarity. A TLDR would have improved it considerably.

<comment><USER6> It's literally the last two lines:

> NIGHTCODE 2

> TOTAL REWRITE

</comment></comment></comment><comment><USER10> How would you compare it to Cursive feature-wise?

<comment><USER11> I don't think it compares. There's no click through to definition in night code. I'd say nothing beats cursive so far.

</comment></comment><comment><USER12> Let's see if it can build itself...

<comment><USER12> Nope, at least not with a clojure noob at the wheel.

</comment></comment><comment><USER13> Very pleased you chose to incorporate Parinfer! Thnx.

</comment><comment><USER14> Woot!

</comment><comment><USER15> link to download -> go to project home -> clojure -> bye</comment>


Show HN: I've written down everything I learned for the past year - <AUTHOR> https://github.com/yoshuawuyts/knowledge <comment><USER2> This reminds me of Nicholas Felton who produces every year a Feltron report; [http://feltron.com/](http://feltron.com/)

</comment><comment><USER3> Interesting. Can I ask how and when you start writing down a piece of knowledge? Have you hit times when you've missed inputting some knowledge, purely because you've been engrossed in whatever task it is.

I've attempted this sort of thing multiple times, with varying results. More often that not, I'll end up getting frustrated with missing a piece, after being either too busy or on a tight deadline.

<comment><AUTHOR> > Have you hit times when you've missed inputting some knowledge, purely > because you've been engrossed in whatever task it is There are so many > things I wish I'd written down that I hadn't, but I think the key is to turn > it writing things down into a routine.

I have a shared tmux tab that's always open, so no matter what I'm doing I can C-a-7 to write something down, and C C-a to get back to work - it's pretty fast!

Initially I was quite concerned with deadlines too, but I've found that even in the short run, writing things down ends up saving time - I've found that it's usually research that ends up taking time, not writing things down.

I hope this was helpful (:

</comment></comment><comment><USER4> Interesting! Reminds me of Jerry's Brain, which has 190,000 thoughts and over 300,000 links between them.

[http://jerrysbrain.com/](http://jerrysbrain.com/)

</comment><comment><USER5> Interesting stuff! I've bookmarked the long list of sci-fi novels.

</comment><comment><USER6> How would you summarize it?

<comment><AUTHOR> "knowledge"</comment></comment>


Candles Anyone? [Pipe Tobacco, Coconut Bourbon, Leather] - <AUTHOR> Hello HN,
I'd like to make some candles this weekend. If anyone is interested in the candles I make, I've enabled a 60% off coupon.
https://www.etsy.com/shop/thoughtfulcandlesnyc?coupon=60PEROFF
I enjoy making them. I'd like to make some for people this weekend.
That's all.
Thanks for reading.
https://thoughtfulcandles.com/candles/products/how-i-make-my-candles/ (if you want more info behind my us). <comment><AUTHOR> oh - and if you want one, but the price is still too expensive, dm me. I can create a steeper coupon for you.</comment>


Maths discovered or invented? - <AUTHOR> http://jackpstephens.com/is-math-real/ <comment><USER2> The author brings up a good point. In mathematics, existence includes all possibilities and constructs that emanate from an axiomatic system. But in the universe as a whole, we have a time element - can we say the heat death of the universe is real and -exists- if it hasn't happened yet but is a forgone consequence of the universe's physical rules? Furthermore, if the origin of the universe is simply some simple rules that cause the notions of space and time and all the consequent physics - would we not abstract and say that the truest sense of the universe is then its simplest constituents - ie. the original mathematical rules that cast spacetime into existence? Math is all about generalizing and abstracting to more universally applicable truths. It is the science of pure truth. And I also believe that human instinct of seeking higher platitudes of knowledge is also based on abstracting ideas and truths in more generally applicable forms. Ultimately our concious experience is filtered by our Phaneron [1]. So it is hard to be concrete on an opinion about the universe when our own model of cognition is much more limited and thus a smaller universe of discoverable truth. That is where faith exists. I liken wisdom about full truth to be best described by buddhists, if the universe is all form, the origin of form, then it is impossible to see its form from the outside. [2] Recursion and self description is the origin of all antimonies. One cannot fully perceive the black box that one is an inhabitant of. The outside perspective, the true non shadowed clockwork, will always be a mystery.

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

[2] [https://en.m.wikipedia.org/wiki/Skolem%27s_paradox](https://en.m.wikipedia.org/wiki/Skolem%27s_paradox)</comment>


$15M Granted by Leverhulme to New AI Research Center at Cambridge - <AUTHOR> http://futureoflife.org/2015/12/03/15-million-granted-to-new-ai-research-center-at-cambridge-university/ <comment><USER2> To social sciences research, really.</comment>


FEMA is about to send a 'Presidential Alert' to millions of U.S. phones - sahin-boydas https://techcrunch.com/2018/10/03/fema-is-about-to-send-a-presidential-alert-to-millions-of-u-s-phones/ <comment><AUTHOR> _And, unlike other alerts, Americans cannot opt-out of receiving a presidential alert_

Is that still true if you run your own customized OS (like whatever-the- successor-to-cyanogenmod-is-called-now)? Or is this all done at such a deep level within the phone's firmware that it's all-but-impossible to turn it off?</comment>


How Islam Shaped the West - <AUTHOR> https://www.newstatesman.com/culture/books/2019/05/how-islam-shaped-west <comment><USER2> Very interesting read though talking about "Islam" as a religion or culture is quite misleading because of its diversity and pluralism. Indeed very different from any western Christian culture.

There are 8 official jurisprudence (schools of law, fiqh): 4 Sunni, 3 Shia and ibadi (Oman only). Only about 15% of sharia law is in consensus. So it's misleading to generalize what Islam stand for (when referring to it as a culture based in religious law) or not on any particular issue.

Ie some of these schools of law, majority, would be more respecting of women rights (ie abortion) than few states in the USA. In fact I'd say legislation like in Alabama is a grotesque caricature of what some Americans believe is sharia law.</comment>


Fire Sale on Windows RT - <AUTHOR>

Wouldn't it be brilliant to recover some of those sunk costs and penetrate the market before anyone else? Re:Hp Touchpad <comment><USER2> It would drag down Windows Phone 8 with it IMO.</comment>


Ask HN: Did I choose the right NoSQL database?  - <AUTHOR>

I am frustrated and finally ready to hear the truth (as is usually the case after I've exhausted myself trying to answer the question independently.. "Did I make the right choice?"): I built a web analytics application using CouchDB. Should I have used something else?
[more detail]
I've had a great time working with CouchDB, and the guys behind it have been enormously patient helping me along on a case by case basis (I have refused them the right to tell me I should use something else, because I needed to understand why myself. Doubt is a cancer). I have rebuilt the entire back-end several times confidently, and concisely. On top of that, I'm primarily a front-end developer, so to have gotten this far is without a doubt something the CouchDB team can brag about (I can hardly manage the basics of MySQL without a cheat sheet).
But in my "smallest big client" tests, I haven't been impressed with what speeds I've gotten and fear launching in this state would highlight my lack of qualification to enter the market. Still though, I have pressed on. Maintaining the logic that not finishing is not an option (I have other ideas that are simpler to build).
So far, CouchDB has nailed real-time. The _changes makes something that seemed like a Trojan horse of complexity, as simple as a callback (when paired with NodeJS). The learning curve was slow, but ramped up quickly (remember I'm coming from no NoSQL experience). Additionally there was never a database problem I came across that wasn't due to my own error. The problems I'm having are with representing historical data quickly.
I completely accept that I may have botched some small detail, or missed the big picture during my implementation.. But for the number of iterations I have gone through, I feel like I should have nailed it by now. I am at least confident of that.
Knowing what I know now, I'm certain I can make use of some high level insight. What do you think? Was CouchDB a silly choice for my application? <comment><USER2> What if I asked you: "Did I make a mistake using cream cheese?"

How the heck are you going to answer me? What's the context?

I think you couldn't give us less information if you tried. You need to explain the problem you are trying to solve, the solution you came up with. We need to see data model, example queries.

Also, this isn't a help forum. Ask in the CouchDB group, or on stack overflow.

For what it's worth, I'm going to guess that the problem is with how you wrote it.

<comment><AUTHOR> Thanks latch. You're right. I genuinely feel like an idiot for asking such a vague out of place question in this forum.

To save myself some embarrassment though.. I did outline that my use case was "web analytics" and "real-time". I also suggested I was looking for high level insight.

Still though, I can understand how you might be confused. Let me be clear. I based my expectations on this list:

<http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis>

</comment></comment><comment><USER3> For starters, as evidenced by this post, your thought processes are confusing. You might want to try and bring some focus and clarity to your tasks.

In the beginning, it would be surprising if you already had so much data that it is the amount of data that is causing the performance issues instead of your code or db decision.

For what you are doing, I would give a slight edge to Mongo.

</comment><comment><USER4> It is really hard to tell that CouchDB was the wrong option, since (if I understand correctly) you're doubting your choice on performance issues.

Performance (or lack thereof) can come from the back-end as well, such as complex algorithms. Then there's the connection between the database and the application, caching etc.

I have tried cassandra for a while, but my knowledge of MySQL is so far superior that I stopped bothering with NoSQL and went back to SQL.

</comment><comment><USER5> Don't know about CouchDB well, but personally recommend to go to more popular one (cassandra, mongo, hbase, riak etc) so you may find better documentations and more data points as far as nosql is concerned.

</comment><comment><USER6> I'm not sure, I have not used CouchDB (have played with MongoDB, and know MySQL etc very well).

Your description of the problem is not that clear.</comment>


NSA phone records program illegal, court rules - k-mcgrady http://www.theguardian.com/us-news/2015/may/07/nsa-phone-records-program-illegal-court

<comment><AUTHOR> Comments moved to [https://news.ycombinator.com/item?id=9504939](https://news.ycombinator.com/item?id=9504939).</comment>


Web based accounting software for startup - <AUTHOR>

What is the best (cheap, easy to use) web based accounting software for a three person startup?  Thanks! <comment><USER2> Liquid Accounts - its done online, simple to use, and cheap aswell. its customizable, so it gives you the option to add and remove modules that you dont need. Free support as well.

www.liquidaccounts.net

</comment><comment><USER3> We use google docs spreadsheets. Depending on the number of transactions you need to track, this might be good enough, web based and free.

</comment><comment><USER4> Same question: <http://news.ycombinator.com/item?id=1192246></comment>


Google Bucket Testing New Digg-Like Search Interface - <AUTHOR> http://www.techcrunch.com/2008/07/14/google-bucket-testing-new-digg-like-search-interface/ <comment><USER2> What's the point of the arrows? If I like it, I'll click and not come back. If not, I won't click, or I'll come right back if I do. Voila.

facebook tried a similar voting mechanism in their News Feed, and withdrew it pretty soon. Again, if I like the story, I'll click on it. I wouldn't have expected this from Google, especially after they so vehemently opposed using human judges in the search process.

<comment><USER3> Some users are engaged enough to contribute and the info they gave is invaluable. The point of this isn't to test a new Google interface, it's to gather data. You don't want to spoil the experience for millions of people, hence the bucket testing.

We use it for our search quality and it's a great way to get some more info about what people like which has more info than click data.

<comment><USER2> Fair enough. If users click it, then it can't hurt I suppose. Live Search uses similar "Is this helpful?" prompts that just annoy me, but presumably some people must be voting.

As for me, I'll tell you what I like by what I click.

</comment></comment></comment><comment><USER4> Hopefully that "results you removed" is not permanent, although from the looks of it, it is. Sometimes you use the same keyword, when searching for 2 different things.

</comment><comment><USER5> Edit search results FAQ: <http://www.google.com/support/faqs/?editresults></comment>


US House passes Fed audit bill; measure seen dying in Senate - <AUTHOR> http://www.reuters.com/article/2012/07/25/us-usa-fed-audit-idUSBRE86O1IX20120725

<comment><USER2> "Some Democrats, generally less critical of the Fed, say such audits would undermine the Fed's independence and erode market confidence in the central bank.

"That will politicize the making of such policy, and I think it's a bad way to go," said Steny Hoyer, the number-two Democrat in the House."

The Senate, if this fails, should be very ashamed and Obama's Administration should be extremely ashamed; where's the transparency Mr. Obama?

<comment><USER3> The senate will not pass it, because it is owned by the banks. I doubt it will even be voted on.

If, by some miracle, the senate did vote on it and pass it, Obama (or Romney) would not sign it, they would most likely pocket veto it so he didn't have to answer questions about it. This is because the presidency is also owned by the banks.</comment></comment>