How to do distributed locking - <AUTHOR> http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html <comment><USER2> Thanks to Martin for analyzing Redlock, I looked forward to an analysis. I don't agree with the two main arguments of the analysis. TLDR: I think the unique random token of Redlock is enough for Check & Set when the lock holder work materializes into a database write (also note that it requires a linearizable database, to check token_A_ID > token_B_ID in the Martin proposed solution), and I think the system model is very real world (AFAIK the algorithm is not dependent on bounded network delays, I think there is an issue in the analysis, details in my blog post so other people can evaluate), and that the fact different processes can count relative time, without any absolute clock, with a bound error (like, 10%) is absolutely credible. However, I'm analyzing the analysis in depth right now and writing a blog post with the details to be posted tomorrow. Also note that usually when you need a distributed lock, it's because you have no sane way to handle race conditions, otherwise you can do with some weaker and/or optimistic locking form to start with.

<comment><USER3> The quality of your C code running on a single node is by all accounts really good. But you sometimes speak about distributed systems in a way that is not correct to people who have really spent a lot of time making these things work at scale.

I've done distributed systems, and in fact I usually don't implement systems that are 100% correct under maximally-adverse conditions, for performance and convenience reasons. But it's important to know and acknowledge where and how the system is less than 100% bullet-proof, so that you can understand and recover from failures. When you have 1000 servers, some virtual in the cloud, some in a colocation facility, and maybe 10 or 20 subtle variants in hardware, you will get failures that _should not happen_ but they do. For example, I've had an AWS host where the system time jumped backwards and forwards by 5 minutes every 30 seconds. And I've seen a tcp load-balancer appliance managed by a colo facility do amazingly wrong things.

The point is, you need to understand where the consistency scheme in a distributed system is "fudged", "mostly reliable", "as long as conditions aren't insane", and where they are really guaranteed (which is almost nowhere). Then you can appropriately arrange for "virtually impossible" errors/failures to be detected and contained. This ad-hoc logic you bring to the problem of distributed systems doesn't really help.

Not to "dogpile", but elucidate for others who may not know some of the history here: [https://aphyr.com/posts/287-asynchronous-replication-with- fa...](https://aphyr.com/posts/287-asynchronous-replication-with-failover) and the also interesting reply: [http://antirez.com/news/56](http://antirez.com/news/56)

<comment><USER2> Hello ploxiln, to see systems with clocks jumping is indeed possible, I'll make it more clear in my blog post, but basically it is possible with some effort to prevent this in general, but more specifically the Martin suggestion of using the monotonic time API _is a good one_ and was already planned. It's very hard to argue that the monotonic time jumps back and forth AFAIK, so I think it's a credible system model. The monotonic API surely avoids a lot of pitfalls that you can have with gettimeofday() and the sysadmin poking the computer time in one way or the other (ntpd or manually).

About the ad-hoc logic, in this case I think the problem is actually that you want to accept only what already exists. For example there are important distributed systems papers where the assumption of _absolute time bound error_ among processes is made, using GPS units. This is a much stronger system model (much more synchronous) compared to what I assume, yet this is regarded as acceptable. So you have to ask yourself if, regardless of the fact this idea is from me, if you think that a computer, using the monotonic clock API, can count relative time with a max percentage of error. Yes? Then it's a viable system model.

About you linking to Aphyr, Sentinel was never designed in order to make Redis strongly consistent nor to to make it able to retain writes, I always analyzed the system for what it is: a failover solution that, mixed with the asynchronous replication semantics of Redis, has certain failure modes, that are considered to be fine for the intended use case of Redis. That is, it has just a few best-effort checks in order to try to minimize the data loss, and it has ways to ensure that only one configuration wins, eventually (so that there are no permanent split brain conditions after partitions heal) and nothing more.

To link at this I'm not sure what sense it makes. If you believe Redlock is broken, just state it in a rigorous form, and I'll try to reply.

If you ask me to be rigorous while I'm trying to make it clear with facts what is wrong about Martin analysis, you should do the same and just use arguments, not hand waving about me being lame at DS. Btw in my blog post I'll detail everything and show why I think Redlock is not affected by network unbound delays.

<comment><USER3> It's fair to criticize my somewhat harsh and yet hard-analysis-free critique. But let me explain why it matters to me, and what the relation to Redis Sentinel is:

"Redlock" is a fancy name, involves multiple nodes and some significant logic, less experienced developers will assume it's bulletproof.

"Redis Sentinel" is a fancy name, involves multiple nodes and some significant logic, less experienced developers will assume it's bulletproof.

I guess I'd prefer that people shoot themselves in the foot with their own automatic failover schemes, instead of using a publicized ready-to-use system which has marketing materials (name, website, spec, multiple implementations) which lead them to believe it is bulletproof, and these systems end up being used in for a bunch of general-purpose cases without specific consideration for their failure modes. In this case, the "marketing" is just the fact that you're behind it, and redis really is solid for what it is.

(Usually I avoid automatic promotion/fail-over altogether. It's often not a good idea. Instead I find some application-specific way of operating in a degraded state until a human operator can confirm a configuration change. So service is degraded for some minutes, but potential calamity of automatic systems doing wrong things with lots of customer data is averted.)

It's really not your responsibility to make sure the open source software you offer to the world for free is used appropriately. But people like me will be annoyed when it contributes to the over-complicated-and-not-working messes (not directly your fault) we have to clean up :)

One specific comment: [http://redis.io/topics/distlock](http://redis.io/topics/distlock) notes the random value used to lock/unlock to prevent unlocking a lock from another process. But at that point, the action just before the unlock could very well also have been done after the lock was acquired by another process. So while this is a good way to keep the lock state from being corrupted, it is really a side-note rather than a prominent feature, since if this happens, the data the lock was protecting could well have been corrupted.

<comment><USER4> I have to disagree here.

"fancy names == people think bulletproof" is not a credible criticism.

Now "Oracle Enterprise Manager Fusion Middleware Control" is a fancy name!!! Pretty sure no-one with a clue thinks a product named like that is bulletproof, and its probably got significant logic/nodes etc

I apparently have the opposite experience to you. I'll often find complex distributed systems that are painful to troubleshoot when they misbehave, and find it refreshing on the other hand when someone is just using Redis, because typically THAT system is working a lot more predictable.

If people are too inexperienced to realize that ALL systems have tradeoffs, and not read up on what those are (because apparenly the name is fancy) then they'll get burned. Antirez does a pretty good job of explaining and documenting where he sees Redis limits to be.

Arguing that everyone should be home-baking their own failovers until of learning the limits of well-known ones our there doesn't seem like responsible advice.

</comment></comment></comment></comment></comment><comment><USER5> It's a long read, but the gist of this article is "use the right tool for the job". Redis is really good for some things, but in its current implementation, distributed locking is not one of them.

Along with the author of this blog post, I would recommend the usage of Zookeeper if you have a need for obtaining a lock in a distributed environment. You can read an analysis of how Zookeeper performs under a (intentionally) partitioned network here:

[https://aphyr.com/posts/291-jepsen- zookeeper](https://aphyr.com/posts/291-jepsen-zookeeper)

<comment><USER6> The author dedicates a good chunk of code to describing a potential problem that might happen in long GC pauses or similar situations. That problem is not unique to redis. Is there any way to avoid it in ZK?

<comment><USER7> Yep, and the author even (briefly) describes it. But you can't do it without moving some of the logic into the storage service, to check fencing tokens. Zookeeper exposes various kinds of IDs that can be used to do fencing; apparently (I haven't read the details) Redlock doesn't.

Interestingly, even though HBase uses Zookeeper for coordination, it does _not_ use it for fencing. Instead, fencing is handled by atomic "log-rolling" operations on the HDFS namenode, which can be configured to use its own quorum-based journal. (The equivalent of a "token" is the monotonically- increasing namenode operation sequence number.) So the principle is the same: the system responsible for doing mutual exclusion, and the system that actually stores the data, must be coupled.

<comment><USER6> The solution of fencing tokens on the storage layer that's proposed there, just pushes the problem one layer down - you'll still need the storage layer to be consistent for this to work. Also it means it should be aware of those semantics, which complicates thigns. Redlock has non incremental tokens, so I guess it can be used as well. Read @antirez's reply above.

</comment></comment></comment></comment><comment><USER8> If you want to have a truly parallel system, you cannot share resources between processes. If you need a lock, then that implies sharing of resources... Which implies limited scalability according to Amdahl's law.

To achieve unlimited scalability, you need to make sure that no single data store is shared between all processes and that the amount of interprocess communication (on a per-process basis) doesn't increase as you add more processes.

The more sharing you have, the less you can scale your system.

<comment><USER9> Although no one starts out wanting to have a truly parallel system. They start out wanting to solve a problem and when that requires scalability or redundancy a parallel system is a means to that end. Not every problem can or should be solved with no shared state, and when that's the case, you should know how to do it right.

<comment><USER10> I find the code of highly parallel systems much more elegant and easy to read.

Personally, I find it easier to write highly parallel code than parallel-up- to-a-certain-point code that involves locks likes mutexes and/or semaphores. Highly parallel code just takes a little bit of extra planning and thinking up-front but it saves lots of time and stress down the line.

</comment></comment></comment><comment><USER11> "If you still don't believe me about process pauses, then consider instead that the file-writing request may get delayed in the network before reaching the storage service. Packet networks such as Ethernet and IP may delay packets arbitrarily, and they do [7]: in a famous incident at GitHub, packets were delayed in the network for approximately 90 seconds [8]. This means that an application process may send a write request, and it may reach the storage server a minute later when the lease has already expired."

This statement confused me. It seems to say that the packets were delayed in the network for 90 seconds before being delivered. From reading the original sources it actually sounds like packets were discarded by the switches, so the original requests discarded, and the nodes were partitioned for 90 seconds. When the partition was removed both nodes thought they were the leader and simultaneously requested the other to shutdown. Can anyone confirm? Keeping packets delayed in a network for 90 seconds would seem quite difficult (though not impossible assuming certain bugs).

Edit: On re-reading I think this is just talking about the network stack in general - not the network. A temporary partition may delay delivery of your request until max TCP retries is exceeded on your host, if its recovered before then your request may arrive later than you intended.

<comment><AUTHOR> I only have the blog post to go by, and don't have first-hand information. It seems possible to me that a few packets could indeed be delayed by 90 seconds, perhaps stuck in a switch buffer somewhere, although this would be a small number of packets since those buffers are not very big.

However, yes, I was thinking about the network stack as a whole. Any kind of retries, e.g. TCP retransmission on timeout, effectively turns packet loss into packet delay (within certain bounds). Thus, even if you have a network interruption ("partition") and all packets are dropped, it could happen that after the interruption is fixed, a node receives packets that were sent before or during the interruption. For this reason, I find it helpful to think of it as delay, not just packet loss.

</comment></comment><comment><USER12> Why not just use the database to handle the "locking" for you? For example, to ensure that an email with ID=123 gets sent only once, just check if "email 123 sent" is in the database, otherwise commit it to the database, wait for the transaction to be committed, and send the email.

Edit: Why is this downvoted? It is a serious question.

<comment><USER13> Perhaps because your example fails to describe what happens if there is a crash, after updating the database to say "email sent", but before the email has actually been sent.

<comment><USER12> Well, I didn't want to go into that much detail here, because that also presents a problem in the case of locks (if the locking process crashes, the lock is never released).

<comment><USER14> Good observation! The article also covers that exact scenario - plus a solution called fencing which a proper locking system can help facilitate.

<comment><USER12> I like the fencing solution. Couldn't such a scheme be implemented over a database instead?

Why I'm thinking more in terms of a database-oriented solution is because there is still the problem of crashing. What happens if the system crashes just before the email is sent? The system somehow needs to remember to restart that task (sending the email) when it comes back up. And this is probably best done through a database anyway.

</comment></comment></comment></comment></comment><comment><USER15> "When used as a failure detector, timeouts are just a guess that something is wrong. (If they could, distributed algorithms would do without clocks entirely, but then consensus becomes impossible [10]."

Having just re-read Lynch's paper, can you explain what you mean here? I didn't see anything explicitly relying on time. It could be there is some implicit usage I didnt see. Additionally, the paper's impossibility result is about "perfectly correct consensus" which applies with and without clocks and then has a positive result for "partially correct consensus" (i.e. not deciding a value is a correct result). Im not sure which you mean when you say "consensus becomes impossible" as it is either already impossible (the perfectly correct protocol) with one faulty process or (to my understanding) not dependent on time (the partially correct protocol).

p.s. great article!

<comment><USER16> I'm having trouble relating this comment to the referenced paper [1], which seems to be explicit that its impossiblity result does not apply when synchronised clocks are available.

For example, on page 375: "Crucial to our proof is that processing is completely asynchronous; that is, we make no assumptions about the relative speeds of processes or about the delay time in delivering a message. We also assume that processes do not have access to synchronized clocks, so algorithms based on time-outs, for example, cannot be used."

1\. [http://www.cs.princeton.edu/courses/archive/fall07/cos518/pa...](http://www.cs.princeton.edu/courses/archive/fall07/cos518/papers/flp.pdf)

<comment><USER15> You mean the OP's comment or mine? I agree with you if you mean the OP's comment. Though your quote refers to synchronized clocks. I dont think OP is referring to synchronized clocks, though your point that Lynch et al does not rely on timeouts is what Im getting at.

</comment></comment></comment><comment><USER17> For those interested in distributed locking with Redis and C#, check out this blog post we did which also links to a github project. We use this very heavily. Hope it helps someone.

[http://stackify.com/distributed-method- mutexing/](http://stackify.com/distributed-method-mutexing/)

</comment><comment><USER18> > In a reasonably well-behaved datacenter environment, the timing assumptions > will be satisfied most of the time – this is known as a partially > synchronous system [12]. But is that good enough?

Please consider this answer [0] (which I personally understood as - YES, real systems are always partial sync): "Asynchronous systems have no fixed upper bounds. In practice, systems tend to exhibit partial synchrony, which is described as one of two models by Dwork and Lynch in Consensus in the Presence of Partial Synchrony. [1]"

[0] [http://bravenewgeek.com/category/distributed- systems-2/](http://bravenewgeek.com/category/distributed-systems-2/)

[1] [http://groups.csail.mit.edu/tds/papers/Lynch/jacm88.pdf](http://groups.csail.mit.edu/tds/papers/Lynch/jacm88.pdf)

</comment><comment><USER19> Interesting document a colleague of mine wrote: [https://specs.openstack.org/openstack/openstack- specs/specs/...](https://specs.openstack.org/openstack/openstack- specs/specs/chronicles-of-a-dlm.html)

<comment><USER20> Off-topic but that URL is remarkably repetitive. Is that some kind of SEO play?

<comment><USER19> No, its an effect of autobuilding from a git repo, I think.

The specs are submitted for review at [https://github.com/openstack/openstack- specs](https://github.com/openstack/openstack-specs)

</comment></comment></comment><comment><USER21> Not directly related, but in a sublink within that piece I found an interesting read about 2 phase commits in Postgres.

[https://aphyr.com/posts/282-call-me-maybe- postgres](https://aphyr.com/posts/282-call-me-maybe-postgres)

</comment><comment><USER22> Interesting stuff. In all my distributed systems work so far, I've assumed that a distributed lock is a thing to avoid. I really should take another look at them, just as a tool to have at my disposal.

<comment><USER23> If you assume that your distributed lock gives you transactional guarantees that you are the only lock holder then you are making a mistake. If, however, you can tolerate small overlaps in lock holders you are fine and this helps with numerous distributed algorithms. Further, using other facilities such as fences can make it even more secure. Another feature of ZooKeeper is write- with-version. You could obtain a lock (using Apache Curator - note I wrote this), then do a write-with-version to achieve 100% certainty that you are the only writer.

<comment><USER23> BTW - I wrote a Curator Tech Note about this a while ago: [https://cwiki.apache.org/confluence/display/CURATOR/TN10](https://cwiki.apache.org/confluence/display/CURATOR/TN10)

</comment></comment></comment><comment><USER24> Why would you ever want to do distributed locking when you can do MVCC via eg vector clocks, possibly with cryptographic signatures?

If you want to acquire some shared resource, then elect an owner for that resource.

<comment><USER25> If you want to do mutual exclusion using distributed locking then you end up in a painful place (as the article points out). In general you can't distinguish between a process that is running really slowly and a process that is dead. So when confronted with a non-responsive lock owner you end up with two unpleasant options: 1) Assume the lock owner is alive and don't do anything. This approach guarantees mutual exclusion but isn't especially useful because it gets stuck when things die. 2) Assume the lock owner is dead and take the lock. This doesn't guarantee mutual exclusion but "probably" works if you make the timeout "long enough." This can work correctly if you have a realtime system which will monitor the lock owner and kill the owner if the lease on the shared resource expires (this would probably require a special hardware/OS/programming language stack).

</comment></comment><comment><USER26> Instead of the fencing token, could the scenario in the blog post be prevented using a good hashing function?

When you perform a write, instead of the token, send a hash of the object previously read. The storage can then compare this against a hash of the resource's current state. If it doesn't match the lock expired and the write is not accepted.

This would reduce the state to keep track off to the resources themselves.

</comment><comment><USER27> Has anyone used both Zookeeper and etcd in production for management of distributed state?

Generally when I think of this problem I reach for etcd, not Zookeeper first, in the hopes of it being lighter (with a relatively vague definition of "light"), and easier to use.

<comment><USER28> etcd would be a fine choice, but Consul provides a lock feature[1] out of the box.

1\. [https://www.consul.io/docs/guides/leader- election.html](https://www.consul.io/docs/guides/leader-election.html)

<comment><USER7> As the article explains at length, using Zookeeper or etcd as a "locking service" in this way is _not_ safe, even if the service is perfect and failure-free. There is a fundamental race condition between finding out that you've obtained a lock, and doing some other operation that assumes mutual exclusion.

<comment><USER28> It's not really "fundamental". It's simply that the process that acquires the lock can fail (or be paused, or partitioned away from everything else, etc), and if it does, but then comes back later with a valid lock, bad things may happen.

The author's solution is to push serialization logic into the resource/storage layer (by checking fencing tokens). But what if the resource _is itself distributed_? Then it needs it's own synchronization mechanism? It's locks all the way down.

<comment><USER28> Thinking more about it, this _is_ a fundamental weakness of having self- policing processes, which I suppose is the OP's main point. It can be mitigated by having infinite lock TTLs, at the cost of risking system deadlock on process failure. Thank you to GPP for spurring me to think more deeply about this.

As I stated, though, if the resource being protected is either a distributed system itself, or a system that cannot support fencing logic, this failure mode is difficult or impossible to prevent. The frequency of failure should be kept in mind here: most services can probably guarantee 99.99% uptime against the likelihood of 5 minute GC pauses.

</comment></comment></comment></comment></comment><comment><USER29> > If they could, distributed algorithms would do without clocks entirely, but > then consensus becomes impossible

Consensus can be achieved without clocks using blockchains: Instead of timelocking the resource, client can broadcast his altered version after making changes to the network. The next client than then start working on top of this changed resource, but since multiple versions might be floating around (due to timing issues in the first place) the longest tree wins. So if a client submits work done on a shorter tree then it is rejected by the network.

This has other issues like it takes longer time & reorganization risks but it does away with clocks altogether by providing a different method of timestamping.

This is similar to proof-of-work timestamp server that bitcoin uses but we can do away with proof-of-work because the resource and membership in the network is centralised.

<comment><USER30> a blockchain does not make consensus without clocks possible it is just a grossly inefficient vector clock implementation (that incidentally does not provide consensus in the distributed systems sense)

<comment><USER29> I just described how you can do it without clocks. Is there a mistake somewhere, sorry?

<comment><USER30> a clock in the context of a distributed system is a method of providing a partial ordering (a happened before b). most blockchain implementations use a merkle tree that uses predecessor transactions as inputs to the output as the clock

regardless, blockchains as implemented in certificate transparency and bitcoin aren't actually consensus systems, they are just (highly accurate) approximations

<comment><USER29> Both of the points you make are true but how are they relevant here?

We are talking about clocks that tell time in the quoted quote (time is ordering of events by definiton) & consensus in bitcoin is final(accurate) enough an practical approximation as much as a centralised system as described in OP is. Either I am misunderstanding or this is your dislike for bitcoin.</comment></comment></comment></comment></comment>


The Emacs Calculator (2009) - <AUTHOR> http://nullprogram.com/blog/2009/06/23/ <comment><USER2> Emacs calc can do financial/TVM calculations, too. A useful tutorial by Andrew Hyatt on doing financial calculations [0]; he has wrote many other calc tutorials [1] in the Emacs Google Plus community [2].

[0] Emacs financial calculations: [https://plus.google.com/+AndrewHyatt/posts/YdwsbNmZ4NL](https://plus.google.com/+AndrewHyatt/posts/YdwsbNmZ4NL)

[1] Index of Andrew Hyatt's emacs calc tutorials: [https://blog.markhepburn.com/2013/12/07/andrew-hyatts- emacs-...](https://blog.markhepburn.com/2013/12/07/andrew-hyatts-emacs-calc- tutorials)

[2] Emacs Google Plus community: [https://plus.google.com/communities/114815898697665598016](https://plus.google.com/communities/114815898697665598016)

</comment><comment><USER3> I took the time to properly learn and use emacs-calc this year, after being an emacs user anyway. Before that, I tended to use bc on the shell for quick calculations, but always felt that to be too limited.

Since then I am practically a daily user.

It's not without downsides, and some simple workflows that seem common and trivial to me personally feel a bit awkward and contorting. For example, working with variables/equations, with that '=>' "operator", is rather strange. There also seems to be no support for hex numbers in 0x-prefixed lowercase notation, which makes it hard to impossible to just copy and paste hex numbers for programming. And while emacs-calc has a very impressive scientific unit system, often I just want to use unit _prefixes_ , like u,m,M for micro,milli,Mega respectively, without having to resort to using actual physical units in my calculations (and then finding out again how to simplify appropriately).

I also almost don't use the trail at all, mostly because its navigation and actioning feels tedious and downright archaic, making me think that emacs-calc probably started out a few decades ago, with a specific, now outdated, terminal paradigm in mind.

But all in all, it's pretty impressive, and fills the role as my daily companion for quick, and sometimes more elaborate, computations well.

<comment><USER4> This small addition lets you work with SI byte units. I have no idea why this wouldn't be in the default unit set, but hey, this is why we use emacs.

[https://raw.githubusercontent.com/mnp/dotfiles/master/shared...](https://raw.githubusercontent.com/mnp/dotfiles/master/shared- elisp/my-calc-extras.el)

</comment></comment><comment><USER5> Being an old HP48 user, finding Calc was what me fall the rest of the way in love with Emacs. If I'm at the shell prompt I'll still startup GP/Pari for quick calculations, but it's hard to beat Calc for longer sessions.

The only downside is that, like any advanced Emacs functionality, if you don't use it frequently you forget all the commands.

<comment><USER6> And an HP48 emulator is still what I use on my phone as a calculator.

For the reason you mention, I need to get into the habit of using Calc for my quick calculations; right now, I usually use Google (ick, infix notation) or dc.

<comment><USER7> I've have Free42 on my Android phone. Do you have a particular emulator to recommend?

\--

[http://thomasokken.com/free42/](http://thomasokken.com/free42/)

<comment><USER6> I use Droid48: [https://play.google.com/store/apps/details?id=org.ab.x48&hl=...](https://play.google.com/store/apps/details?id=org.ab.x48&hl=en) ([https://github.com/shagr4th/droid48](https://github.com/shagr4th/droid48))

<comment><USER7> Thank you. I saw that one. Some of the more recent critical comments (stability, responsiveness) gave me some pause.

I'll give it a go.

</comment></comment></comment></comment></comment><comment><USER8> I love Emacs but the calculator, being stack based is just too awkward for me. I know there is the "algebraic mode" but it still is too much. Is there a way to configure it to work like, say, SpeedCrunch (my favorite calculator by far) ?

<comment><USER9> TIL about SpeedCrunch!

[http://www.speedcrunch.org/](http://www.speedcrunch.org/)

[http://www.speedcrunch.org/download.html](http://www.speedcrunch.org/download.html) even links to 32- and 64-bit prebuilt Qt binaries for Linux. Nice.

<comment><USER10> How does it compare with good old command line 'mc'?

<comment><USER8> you mean "bc" ? Dunno, never used a lot.

For computations such as 10+3, it's comparabale. But I give SpeedCrunch an dedge because it can compute "sin(pi/2)" out of the box.

<comment><USER10> Yes, bc. Obviously it's been a while since I used it!

</comment></comment></comment></comment></comment><comment><USER11> Calc is so useful to have right there. I have never used Windows calc since discovering the emacs one many years ago. Once I got used to it I had to find an RPN one for my phone (RealCalc and PCalc for Android and IOS, respectively).

Algebraic formulas are great but beyond my typical reuse recall duration.

<comment><USER8> Could you explain why you feel RPN is better for you ? I've never been able to get used to it... Maybe I get it wrong...

<comment><USER12> After you get used to it, you end up being able to calculate much more quickly. It's basically having a little Forth machine in your hand or at the end of your keyboard.

<comment><USER13> The joy of never, ever having to type a parenthesis must be experienced to be appreciated.

<comment><USER14> And yet so many RPN people are Lisp programmers the rest of the time. I guess it balances out.

<comment><USER15> I would really like a postfix lisp.

I wonder what edge cases I would run into designing one.

<comment><USER13> Aren't concatenative languages like Forth and Factor essentially what you're looking for?

<comment><USER15> They are very focused on the stack, which isn't very lispy.

I was wondering how difficult it would be to make a common lisp or scheme, but with postfix syntax instead of prefix.

<comment><USER16> We could start by tinkering with a silly macro:

      [10]> (defmacro rev (&rest forms)
             `(progn ,@(mapcar (lambda (form)
                         (if (and (consp form) (rest form))
                           `(,(car (last form)) ,@(butlast form))
                           form))
                     forms)))
      REV
      [11]> (rev (1 1 +))
      2
      [12]> (rev (3 print) (1 1 +))
      3
      2

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> JOE also had a calculator: Esc M

It tries to include features of a Casio scientific calculator, so includes things like statistics / regression (of selected block) and engineering notation display. It inserts underscores between every three digits for easier reading: 0.123_456

It is not reverse polish.

</comment><comment><USER18> This totally nerd sniped me last night. But what is the point? I can't think of a situation where it would give better results than professional tools dedicated to the same tasks. It was probably cool in the 90s, when the alternatives were much weaker.

</comment><comment><USER19> I find the undogmatic approach to notations interesting here; the basic calculator is RPN, but CAS/symbolic features ("expressions") use algebraic notation (with separate "big" and normal notations). Of course everything has elisp underpinnings with its prefix notation, which is also used for custom extensions. Beyond those broad strokes, the basic notation used feels quite quirky, like using _ for negatives

</comment><comment><USER20> "That's just awesome! That's a text editor ... doing calculus!"

Well, some might call that a good definition of scope creep, but at this point I'm sure we're all well aware that even though Emacs might be called a text editor, that's not really all it is.

<comment> xor-xor I like to think of Emacs as a virtual lisp machine for writing _your own_ text editor.

</comment></comment><comment><USER21> Here it goes again, my favorite OS, Emacs. If only it had a web browser as good as chrome.

<comment><USER15> I wonder what a web browser would look like if it evolved inside emacs.

<comment><USER3> There were and still are approaches to web browsing in Emacs. But like every other completely mainstream web browser, keeping up with the evolving web, and especially its client-side programmability and performance needs, made its usefulness rather marginal.

In the end it's often less trouble to switch over to the browser window that's already open anyway and copy and paste data between it and emacs.

<comment><USER21> That's exactly the reason why I use Stumpwm as a wrapper for Emacs and multiple chrome windows.

</comment></comment></comment></comment><comment><USER22> Been using Emacs since '89 and did not know this was a thing. Thanks!</comment>


Ask HN: Dashboard to monitor 10+ servers? - <AUTHOR>

I own 10+ dedicated servers, and want to monitor the health of all of them in 1 sleek, simple web dashboard.<p>Not looking for anything complex, but just want to check the RAM usage, HD usage, and CPU usage of all of these servers in 1 dashboard. Is there anything out there (preferably low cost)? <comment><USER2> Take a look at: [http://argus.tcp4me.com/](http://argus.tcp4me.com/) It easy to use and quick to configure. Polls via snmp and stores in rrds. At first glance I did not like it.. but imho it beats other products in terms of simplicity.

If you are looking for something bigger, then zabbix ([http://www.zabbix.com/](http://www.zabbix.com/)) might be an option. It is not that easy to get running, but has capabilities like dependency based notifications. For example: "Only alarm me of missing ping responses if the router of that box is reachable." I think it is a fantastic piece of software although I had to build an argus-like monitoring interface for it, so that less trained staff is able to work with it.

</comment><comment><USER3> Scalyr ([https://www.scalyr.com](https://www.scalyr.com)) does this, you should give it a try. You can monitor and analyze multiple servers in one place on one dashboard. (Full disclosure: I work for Scalyr.)

If you have any questions or feedback I'd love to hear it!

<comment><USER4> You guys absolutely need screenshots on that site. How can you be selling a dashboard solution without a single image of what that looks like? That should be the first thing I see when I load your site, not a bunch of text.

</comment></comment><comment><USER5> A few months ago I had the same requirement and felt many of the existing services were providing more than I actually needed or wanted. That was basically the reason for why I created a small bash script and later on in December built a web application around it. I just launched it 3 weeks ago so I would love to get a few more people to check it out.

Feel free to give it a try [https://nodequery.com/](https://nodequery.com/)

Feedback would be much appreciated as I wasn't able to gain much traction yet.

</comment><comment><USER6> A link to the Amon.cx beta[0] was posted[1] earlier today, so I figured I'd mention it.

It's free while in beta and $60 for 10 servers, so you can try it without paying right now. Based on the preview image, it looks like it's exactly what you want.

[0]: [https://amon.cx/#beta](https://amon.cx/#beta)

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

</comment><comment><USER7> Have a look at [http://www.superviso.com](http://www.superviso.com) They are giving away dashboard for servers and raspberrypi. Depending on your need there are over 20 widgets and unlimited dashboards.

Only with curl / or any other language you like you can update the whole dashboard.

Most important of all it is free.

</comment><comment><USER8> How do you manage your servers? Are you using puppet or chef? I am using the free version of new relic and I wrote little modules to use their free service. I can monitor all those stats and I am also monitoring MySQl and other stuff. Give it a try. it is free :) they will try to sell you stuff but you don't have to buy it. I can't with our budget.

</comment><comment><USER9> _> ... just want to check the RAM usage, HD usage, and CPU usage of all of these servers in 1 dashboard._

Cacti

</comment><comment><USER10> NewRelic? If you don't need much data retention, it's free.</comment>


Trump to send checks to consumers as part of $850B package - <AUTHOR> https://robinhood.com/news/article/b36fef5d-01d9-364c-ae5d-3b487f9f29dd <comment><AUTHOR> Wow! I don't remember FDR doing anything that drastic.

<comment><USER2> FDR closed the banks. And also tried to semi-nationalize industries.</comment></comment>


Show HN: Tutorial on React Hooks and HTML Canvas - <AUTHOR> https://blog.koenvangilst.nl/react-hooks-with-canvas/ <comment><USER2> Thanks for this. I have been experimenting with it and it's nice to have someone else do all of the finding-out for me so that I can get down to business.

<comment><AUTHOR> Great, let me know what you think when you finish it!</comment></comment>


1021 byte real-time raytracer in JS. Not cool enough for js1k, though. - <AUTHOR> http://democopei.de/1021.html

<comment><USER2> Warning: If you click this, it might hog your CPU. It did that for me. Nothing against it, just a fair warning so it won't catch you unprepared.

</comment><comment><USER3> Why not cool enough for js1k?

<comment><AUTHOR> js1k wants UTF-8 encoding which'd bloat it up to 1500-or-so bytes. We asked to use another charset but didn't get any reply at all. So, being "not cool enough" is just sarcasm.</comment></comment>


Ask HN: Has anyone here ever built their own PCI device? - non-entity I thought it'd be a kinda cool project to do so, even if it's just something super simple like an echo device, but from my understanding many microcontrollers aren't fast enough to support a PCI bus and the general advice I've found is to use an FPGA (unfortunately, which I have zero understanding of at the time). FPGA dev boards seem to be relatively expensive, except cheaper chinese ones which seem to run a little over $100.<p>Has anyone done this before. Did you write about it? What sort of hardware did you use? <comment><AUTHOR> I haven't had experience with PCI but yes with FPGA, even though at a hobby level.

Learning digital design was extremely rewarding for me and I absolutely recommend it.

The main reason for FPGA is that you use A LOT of parallel communication so even though the clock speed of the FPGA might be 200MHz, multiply that for 16, 32 or more lines and you get GBit speeds.

You can get affordable FPGA boards for learning with Lattice iCE40 family. When you jump into Altera or Xilinx things change a little, but you can still get a VERY decent development board from Terasic for a little over $100.

For learning I personally recommend the book "Digital Design and Computer Architecture" by Harris & Harris

Even if you don't become a full FPGA pro, knowing your computer down to a logic gate level brings huge advantages to how you see it, interact with it and write software for it!

<comment><USER2> Upvote for the iCE40. Last i heard it's one of the only devices to have a fully open source toolchain. I had a good experience learning on altera, and they had a pretty comprehensive dev environment, but my impression is that every aspect of their "university program" is ultimately geared towards extracting money from people in exchange for use of ip cores regardless of whether it's really appropriate for the users needs. That being said, i can vouch for cheap terasic boards. I might reccommend buying a sub $50 altera board to get over the initial learning curve, and then expanding into less commercially oriented stuff for more complex projects.

Edit: the iCE40 is a popular choice at CERN, and you should be able to find materials geared towards young physics grad students and other fpga non- experts.

</comment></comment><comment><USER3> I don't have direct experience, but I work in video production and have researched building an SDI capture device that would use an FPGA on a PCI card.

There's a lot here: \- VHDL for the FPGA \- DSP algorithm \- A driver for the OS you are building for \- Scopes and measurement devices for the hardware bits

If you tried to do it yourself you'd spend more money and have a bad time. I'd recommend getting an FPGA dev board and start there.

<comment><USER4> IIRC the Blackmagic Design Intensity Pro [4K] is exactly what you describe here. I remember seeing a picture of one somewhere with a Xilinx FPGA under the heatsink fan.

</comment></comment><comment><USER5> I have some tangential experience, I was a software engineer on a project that had an FPGA based PCIe card. You can do some cool stuff, but development can be very frustrating. PCIe enumeration happens early in startup. Until things are basically working, you have to have a computer that you are ok restarting every few minutes. A test cycle is like: flash image, restart computer, try to determine why it failed.

</comment><comment><USER6> I did it once at a startup I was working for. I used a Xilinx FPGA and did my own PCB design. I designed my own PCI state machine in VHDL.

Surely, if you look around enough you can find some kind of a development board at a reasonable cost.

</comment><comment><USER7> Check out the custom hardware EFF had commissioned for cracking DES.

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

</comment><comment><USER8> No personal experience, but maybe you can find some inspiration here: [https://github.com/ufrisk](https://github.com/ufrisk)

</comment><comment><USER9> Check out Fomu? [https://tomu.im](https://tomu.im)

It's cheaper and tiny, not sure if powerful enough for what you're looking at.</comment>


Secret management design decisions: theory plus an example - <AUTHOR> https://sanderknape.com/2018/03/secret-management-design-decisions-theory-plus-an-example/ <comment><USER2> Secret-management design decisions. This is one of those phrases where the lost art of punctuation would actually help!

<comment><USER3> I thought the article was about how high managers decide about design in secret meetings.

<comment><USER4> Me too, I was wondering how anyone would know. This is actually about the management of secrets.

</comment></comment></comment><comment><USER5> I read this as Secret[s] Management... Design decisions... Eg how to design your org. Where's my head at.

</comment><comment><USER6> I spent six years in the USAF as a nuclear weapons tech. Somce then, I've not seen any civilian company handle security well, or even correctly.

Physical access to properties, building, departments, rooms, cabinets, all tissue-paper defended. Intimidation of rank being rampant. Guards with little to no training or authority. Employees not adequately screened or monitored. Typically all of the above.

<comment><USER7> I'd definitely read more about how to do it properly. For example I wonder how CAs (e.g. Let's Encrypt) secure their infrastructure.

<comment><USER8> If you're referring to a properly run CA, then they're a good model to follow. Some of them, obviously, do not implement proper operational security procedures, but a good many of them do. It's usually required in order to have your Root CA certificate added to the trust store of major browsers, OSes, etc. I was a senior engineer for one of the larger commercial CAs, and started off my career as an engineer for the world's largest gov't CA. Biometrics, HSMs (hardware security modules) for storing the keys, offline root CAs, documenting EVERYTHING, armed guards, etc. are the norm. The CA software platforms themselves are usually assessed for FIPS, Common Criteria, etc. compliance. And we were audited. All. The. Time. I can't speak to Let's Encrypt, but the bigger companies that make their money in the CA space are insanely serious about security.

<comment><USER7> > I can't speak to Let's Encrypt, but the bigger companies that make their > money in the CA space are insanely serious about security.

That's really what I'm interested in, very high level security / operations standards. Not that I'm intending on running the CA myself but it's easier to understand daily trade offs knowing how it would be done if extremely high standards were absolutely necessary.

Unfortunately there is not much reading material online on this subject (I understand it may not be super interesting subject for most people) but reading the CPS really shed some light.

Thanks for your comment!

</comment></comment></comment></comment><comment><USER9> Alternatively, just use Hashicorp vault ([https://vaultproject.io](https://vaultproject.io))

<comment><USER10> Why would anyone run this themselves when ec2 parameter store w/kms is a fully managed and free solution.

<comment><USER11> Note that I work for HashiCorp so I have a clear bias. I tend to shy away from these comments because of that but there is a certain addition I'd like to add here. The other comments around this are good so I won't talk about those.

The surface area of Vault capabilities is much larger than EC2 parameter store and through the lens of our paying customers, most are using Vault for many more of the backends (the most popular probably being PKI).

For pure AWS-based companies, parameter store could provide a fine solution for basic key/value secrets! I don't want to bash at all, I just wanted to make sure for any readers that they don't mistake Vault for purely encrypted K/V.

<comment><USER12> But, if you're using vault for only Secrets Management on AWS you are using a nuclear warhead to destroy an ant-hill.

It's quite frankly not a good experience and really challenging to automate running Vault in a modern environment, all something that is very simple with SSM.

You note this, but I have 2-3 people reaching out to me per week stuck/struggling with vault, who find chamber/SSM and have solved the problem with 1 day of work.</comment></comment></comment></comment>


Get free stuff for keeping a commit streak on GitHub - <AUTHOR> http://www.codeforstuff.com <comment><USER2> So a cronjob should do the trick.</comment>


PCC builds OpenBSD kernel (4.6 -current) - <AUTHOR> http://undeadly.org/cgi?action=article&sid=20091228231142 <comment><USER2> It would be interesting to see how kernels compiled with pcc and gcc compare, size-wise and performance-wise.

</comment><comment> old-gregg I am curious: what is it about GCC that BSD folks want to get rid of it so bad? I don't really follow GCC development, but on a multiple occasions I've heard people wishing there was something else.

I've used C component of it and it was fine. Their C++ implementation is lacking compared to Visual C++ (especially in generated code size and template-related error messages). What else do people dislike about it?

<comment><USER3> BSD people tend to like BSD licensed things.

<comment><USER4> I think it's more the bugs, which tend to show up in kernel code, and the ability to extend the compiler with security features, which is difficult in the rather hairy gcc code. OpenBSD used a custom gcc 2.95 derived compiler for ages because of bug fixes and their security extensions.

<comment><USER5> An other problem is when GCC drops architecture support -- say some old arch which Linux doesn't run on but which the BSDs do -- then the BSDs are forced to maintain multiple old versions of GCC...

<comment><USER6> Which architectures are those? And this is a FreeBSD announcement, which has a much more limited port list than NetBSD.

<comment><USER7> Here are the hardware platforms that OpenBSD runs on (<http://openbsd.org/plat.html>). Not as many as NetBSD, but several.

Porting a program that was written primarily with (say) i386 Debian Linux in mind to other platforms is a great way to find bugs due to incorrect assumptions. They may be asymptomatic on systems with 32-bit processors, the same endian-ness, etc., but they're just lying dormant. Patches from porting and the OpenBSD security audits are contributed upstream, too.</comment></comment></comment></comment></comment></comment>


Circuit Breaker - <AUTHOR> https://martinfowler.com/bliki/CircuitBreaker.html <comment><USER2> David Wheeler: "All problems in computer science can be solved by another level of indirection" (the "fundamental theorem of software engineering").</comment>


Department of Homeland Security Devices on SF Streets - <AUTHOR> http://sfist.com/2016/01/27/trust_no_one.php <comment><USER2> Spoiler: they are air sampling units.

Vendor page: [http://www.hi-q.net/products/continuous-duty-air- samplers/ps...](http://www.hi-q.net/products/continuous-duty-air-samplers/psu- series-outdoor-mobile-continuous-duty-samplers/default.html)

<comment><USER3> Big metal box in a very public place? I feel like I'm channeling Bruce Schnier here but I'll say it anyways... If I was a bad guy and wanted to plant something very bad in plain site, this is exactly how I'd do it. How long do you think it would take the good guys to figure out it's evil? I'd think hours at least. This is something like I'd expect to read in that Movie Plot contest he runs every year.

<comment><USER4> The three exclamation marks in "Do not unplug!!!" made me suspicious immediately. I know this is kinda funny coming from a German but seriously, the department of homeland security can't type properly? I would've called 911 on that box immediately.

<comment><USER5> OFFICIAL BUSINESS!!! NOT A BOMB!!!

<comment><USER6> now i have to try that on my water bottle next time i fly.

</comment></comment></comment></comment></comment><comment><USER7> These have been in New York City for years, but are labeled as EPA devices here. You can always find them on the block of a police precinct (sometimes right next to the front door) and in other major tourists spots (I've noticed them in Times Square and Grand Central).

<comment><USER8> Definitely, I've seen them around NYC as well, including on subway platforms. I've always wondered what they were.

<comment><USER9> There is always one parked in Union Sq station near where that cop on the segway parks. Also labelled EPA.

</comment></comment></comment><comment><USER10> "The Super Bowl is designated a SEAR (Special Events Assessment Rating) level 1, an event that's considered of national importance..." [1]

Ultimate authority over law enforcement coordination during such events goes to the Department of Homeland Security.

[1] [http://abcnews.go.com/US/law-enforcement-high-alert-super- bo...](http://abcnews.go.com/US/law-enforcement-high-alert-super- bowl-50/story?id=36698694)

</comment><comment><USER11> I can see this street corner from my office window. The box is still there: [https://cl.ly/3O271Q3r2n3w](https://cl.ly/3O271Q3r2n3w)

</comment><comment><USER12> I'm having a hard time looking at that box on the corner of a reasonably busy intersection, ostensibly there as some kind of early warning device, and that _sign_ that says "Do not unplug"...and thinking "so all I have to do to defeat this is...unplug it?"

Seriously?

<comment><USER13> For a device meant to detect a something like a weaponized airborne agent over an area, I'm guessing Homeland Security would more likely detect all monitors being unplugged simultaneously than an actual airborne attack.

</comment></comment><comment><USER14> If this is truly from DHS, then it is completely insane. For one, if it is for some important security function that presumably merits three exclamation points from DHS, then having it vulnerable to disablement by any casual passerby is ridiculous at best. At a minimum, the sign should carry some legal warning or threat of penalty.

Secondly, training people to think it normal that odd devices would randomly appear in public places (with no advanced notice or explanation and amateur signage) is a horrible idea. Coming from DHS, it's even worse.

</comment><comment><USER15> When a president or VIP comes into town, they even remove usps blue mailboxes (which are federal and a felony to tamper with in the first place). They also weld sewer lids to their holes.

I feel everyone in the public deserves that kind of detailed attention to security, there should not be any mysterious boxes left around to train people to ignore mysterious boxes which may be bombs.

</comment><comment><USER16> DHS isn't trying to hide what they are, I saw a man wearing what looked like a construction vest standing next to that exact unit. On the back it read something like "Air Purity Inspector"

<comment><USER17> DHS isn't trying to hide a grocery cart sized steel box with "Property of DHS" stamped on it?

Welp, I'm shocked.

But really, I get your point. Why is it that everyone is acting like this was some shady move? I'm sure DHS is more than capable of installing whatever without anyone knowing.

</comment></comment><comment><USER18> I'd suggest to call an authority other than Homeland Security and tell them a suspicious big box is standing there. Lets see how that plays out.

</comment><comment><USER19> I think someone must be held accountable here. So the reporter actually made good efforts to find out what it was and he could not.

This goes to show that tomorrow some bad guys would put some harmful machines there with labels (Homeland Security Device, touching or unplugging will attract charges, asking questions will lend you in jail) how are citizens supposed to deal with it ?

</comment><comment><USER20> Unplug the box, you'll figure out quickly who owns it...

<comment><USER21> There was never a question of who owns it.

</comment></comment><comment><USER22> One can only hope this isn't a modern day version of bio-warfare games/tests. See: [http://www.rense.com/general15/ofmicrobesandmock.htm](http://www.rense.com/general15/ofmicrobesandmock.htm)

</comment><comment><USER23> This seems like the typical device that would instantly make its way from the streets of (typically) NYC to the home (or remote place not related to home at all) of a security hobbyist in ca. 1990s NYC. Said hobbyist would probably think that this is a phreaking awesome gift from the state.

Or someone would call the number and watch the device to see what happens.

At the very least a couple of these devices would get unplugged.

I can't help but chuckle at the "don't unplug" sign...surely this is some sort of social experiment to see how long it takes until n% are unplugged?

</comment><comment><USER24> I see these around NYC relatively frequently. Sometimes I generally also see gas canisters apparently slightly open in subways and street corners at the same time I see the gas detectors.

I have always assumed that whoever is responsible for placing the devices is releasing a benign (but distinct) gas and measuring it in several places downwind.

By doing so, the DHS could use the data they gather to triangulate the source of a chemical weapon, or to predict its most likely path of destruction for quick aid and response.

<comment><USER25> Are you referring to gas canisters other than the liquid nitrogen tanks that litter the sidewalks to cool underground infrastructure?

<comment><USER26> I'm not aware of any use of liquid nitrogen to keep general infrastructure cool but it sounds like you're referring to the gas tanks that keep wiring under a positive pressure to keep moisture out.

[http://gothamist.com/2008/01/31/nitrogen_tanks.php](http://gothamist.com/2008/01/31/nitrogen_tanks.php)

<comment><USER25> I stand corrected! That use makes more sense, since sometimes they seem to come and go transiently.

<comment><USER24> I haven't looked to closely into it, but some of the canisters I have seen have seemed to be slowly releasing gas into the air.

</comment></comment></comment></comment></comment><comment><USER27> Someone with a SDR should go out there and see what there is to see.

</comment><comment> xkcd-sucks Looks like several thousand dollars worth of salvageable parts!

</comment><comment><USER28> They're probably empty. It's mostly security theater to perpetuate the myth that the police state will look after you.

</comment><comment><USER29> I've seen in these inside Cobo Hall during the North American International Auto Show as well.

</comment><comment><USER30> They's trying to get an accurate measurement on the concentration of smug in San Francisco.

[http://southpark.cc.com/clips/104282/smuggy-san-francisco- to...](http://southpark.cc.com/clips/104282/smuggy-san-francisco-town)

</comment><comment><USER31> If you see something, say something! Call it in if it is suspicious to you!

</comment><comment><USER32> Followup on the bacterial weapons tests? [https://news.ycombinator.com/item?id=9862410](https://news.ycombinator.com/item?id=9862410)

</comment><comment><USER33> I've seen them on platforms occasionally throughout the NYC subway system - the first time maybe a year or two ago although I can't be sure when exactly.

</comment><comment><USER34> Discreet Oculus

</comment><comment><USER35> I know a Matt Scully...lol no way does he work for the DHS

</comment><comment><USER36> Spoiler, it's a swibble, and the reason that the DHOS dosen't know about them _now_ , is because they are from the future.

> SWIBBLE: some kind of device to control the 'politically correct behaviour' > of citizens. It is "an artifically evolved telpathic metazoan." It's purpose > was to stop war by ensuring that everyone maintained the same ideology, that > everyone agreed. The last war was fought between those who wanted swibbles > and those who didn't. When the main character asks the wrongly directed > time-traveled repairman what happened to those who lost the war, the answer > is wonderfully simple, "Why," the repairman said gently, "the swibbles got > them.":Service Call, vol 4.</comment>


Show HN: Cortex – Open-source alternative to SageMaker for model serving - <AUTHOR> https://github.com/cortexlabs/cortex/tree/v0.15.1 <comment><USER2> Hey there, great work. I used Cortex as an inspiration when designing chantilly: [https://github.com/creme-ml/chantilly](https://github.com/creme- ml/chantilly), which is a much less ambitious solution tailored towards online machine learning models. Keep up the good work.

</comment><comment><USER3> This certainly looks like a cleaner way to deploy an ML model than SageMaker. Couple of questions:

* Is this really for more intensive model inference applications that need a cluster? It feels like for a lot of my models, a cluster is overkill.

* A lot of the ML deployment (Cortex, SageMaker, etc) don't see to rely on first pushing changes to version control, then deploying from there. Is there any reason for this? I can't come up for a reason why this shouldn't be the default. For example, this is how Heroku works for web apps (and this is a web app at the end of the day).

<comment><AUTHOR> You're 100% right that Cortex is designed for the production use-case. A lot of our users are running Cortex for "small" production use cases, since the Cortex cluster can include just a single EC2 instance for model serving (autoscaling allows deployed APIs to scale down to 1 replica). For ML use- cases that don't need an API (a lot of data analysis work, for example), Cortex is probably overkill.

As for your second question, we definitely want to integrate tightly with version control systems. Since right now we are 100% open source and don't offer a manged service, we don't have a place to run the webook listeners. That said, most of our users version control their code/configuration (we do that with our examples as well: [https://github.com/cortexlabs/cortex/examples](https://github.com/cortexlabs/cortex/examples)), and it should be straightforward to integrate Cortex into an existing CI/CD workflow; the Cortex CLI just needs to be installed, and then running `cortex deploy` with the updated code/configuration will trigger a rolling update.

If you're referring to version control for the actual model files, Cortex is un-opinionated as to where those hosted, so long as they can be accessed by your Predictor (what we call the Python file that initializes your model and serves predictions). If you're interested in implementing version control with your models, I'd recommend checking out DVC.

<comment><USER4> Is it possible to partner with you to offer a managed service for Cortex? We are looking at your solution to offer our clients for deployment.

</comment></comment></comment><comment><USER5> Has anyone used Cortex in production?

\- Could you share your experiences?

\- why would one choose this over docker for instance?

<comment><AUTHOR> I'm sure others will comment, but in the meantime, some people have written up their experiences using Cortex in production. I'd point you to AI Dungeon: [https://medium.com/@aidungeon/how-we-scaled-ai- dungeon-2-to-...](https://medium.com/@aidungeon/how-we-scaled-ai-dungeon-2-to- support-over-1-000-000-users-d207d5623de9)

We also have a pretty active Gitter channel: [https://gitter.im/cortexlabs/cortex](https://gitter.im/cortexlabs/cortex)

As for your second question, Cortex uses Docker to containerize models. The rest of Cortex's features (deploying models as microservices, orchestrating an inference cluster, autoscaling, prediction monitoring, etc.) are outside Docker's scope.

<comment><USER5> >orchestrating an inference cluster, autoscaling, prediction monitoring,

Does this approach preclude the need for queuing (a la RabbitMQ) and/or a load balancer?

<comment><AUTHOR> Yep! Cortex deploys load balancers on AWS and manages queueing.

<comment><USER5> This is super-exciting! I didn't know it could be this easy!

How do you handle API authentication? Is there a module that interfaces with AWS API gateway? or external API authentication?

<comment><AUTHOR> Right now, users handle API auth by using AWS API gateway in front of Cortex, but incorporating AWS API Gateway into Cortex to automate this is on our short term roadmap.

</comment></comment></comment></comment></comment></comment><comment><USER6> The name Cortex is in use for the scalable Prometheus storage backend: [https://github.com/cortexproject/cortex](https://github.com/cortexproject/cortex)

<comment><USER7> ... and for a lot of other things: [https://en.wikipedia.org/wiki/Cortex](https://en.wikipedia.org/wiki/Cortex)

</comment></comment><comment><USER8> One of the things that has deterred me from SageMaker is how expensive it can be for a side project. Real-time endpoints start at $40-$50 per month, which would be a bit too much for a low-budget project on the side. I love the idea of using an open-source alternative, but I noticed that all of the systems combined for Cortex would be a bit more expensive. Do you have any tips on how to keep a model deployed cheaply for a side project using Cortex? Id be fine with a little bit of latency on the first request, similar to how Heroku's free dynos work.

<comment><AUTHOR> In general, Cortex will be significantly cheaper because you're only paying AWS for EC2 (the bulk of the bill) and the other AWS services used (a much smaller portion of the bill). With SageMaker, you're paying the EC2 bill plus a ~40% premium.

To keep the AWS bill as low as possible, Cortex supports inference on spot instances, which are unused instances that AWS sells at a steep (as in 90%) discount. The drawback is that AWS can reclaim the instance when needed, but with ML inference failover isn't as big of a deal, since you typically don't need to preserve state.

If you use spot instances, choose the cheapest instance type possible, and keep your autoscalers minimum replicas to 1 (meaning it won't keep many replicas idling), you should be able to deploy the model pretty cheaply. Significantly cheaper than with SageMaker, at the very least.

There's some more info here: [https://www.cortex.dev/cluster-management/spot- instances](https://www.cortex.dev/cluster-management/spot-instances)

</comment></comment><comment><USER9> Why would I use this over deploying the model to a lambda function aside from lack of GPU? (not trying to be confrontational, genuinely don't know) Won't lambda functions scale as needed? How does this compare cost wise?

<comment><AUTHOR> Great question. We actually experimented with Lambda before ever building Cortex. We ran into several issues, the three easiest to list are:

1\. Size limits. Lambda limits deployment packages to 250 mb uncompressed, and puts an upper bound on memory of 3,008 mb. That's not nearly big enough for a lot of models, particularly bigger deep learning models.

2\. As you mentioned, GPU inference is supported on Lambda, and for many models, GPUs are necessary for serving with acceptable latency.

3\. Lambda instances can only serve one request at a time. With how slow ML inference can be—especially if you need to call another API or preform some IO request—it's easy to lock up Lambda instances for full seconds just to serve one prediction.

The TL;DR is that while Lambda works for some use-cases, it in general lacks the flexibility and customizability needed for most inference use-cases.

</comment></comment><comment><USER10> How is this compared to KubeFlow?

<comment><AUTHOR> The simplest way to put it is that Kubeflow (whose team we have a ton of respect for) is a tool for helping devops engineers build their ML deployment platform on kubernetes, whereas Cortex is an ML deployment platform. Kubeflow plugs into an existing k8s cluster, whereas Cortex abstracts k8s (and automates AWS-layer devops too).

With Cortex, we wanted to build something so that developers can take a trained model—regardless of if it's trained by their DS team or if it is a pre-trained model—and deploy it as a production API without needing to understand k8s. Because Cortex manages the k8s cluster, we can do the legwork for features like spot instances, request-based cluster autoscaling, GPU support, etc, and expose them as simple yaml configuration.</comment></comment>


Linguists Discover Previously Unidentified Language In Malaysia - <AUTHOR> https://www.smithsonianmag.com/smart-news/unknown-language-discovered-malaysia-180968099/?no-ist <comment><USER2> There is no clarification in the article (unless I missed it) that Jedek is a derivation, or based on Bahasa Melayu (the Malay language)?

Here is Australia, almost every Aboriginal tribe has their own dialect. Often times tribes that lived only a few hundred miles apart had their own unique language. Not surprising that the article mentions there are over 7000 different languages spoken on this planet.

<comment><USER3> They imply it's in the Austoasiatic language subfamily Aslian¹: "Some of these words suggested a link with other Aslian languages [...]".

Austoasiatic² is the family that includes Vietnamese and Khmer, but not Malay.

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

2: AKA Mon-Khmer [https://en.wikipedia.org/wiki/Austroasiatic_languages](https://en.wikipedia.org/wiki/Austroasiatic_languages)</comment></comment>


Priority Bicycles: How a Startup Builds a Better, Cheaper Bicycle - <AUTHOR> https://www.forbes.com/sites/everettpotter/2018/02/04/priority-bicycles-how-to-build-a-better-bicycle/#65ee623c1016 <comment><USER2> I would recommend the Classic Plus to entry level commuters, it's got all the right specs, though it's not the first of it's price point with those specs. The hard part when trying to help my non-cyclist friends pick out a bike is convincing them that they want a single speed. So I let them get a bike with a derailleur and next season it's all fucked up and they haven't bothered to fix it.

"I've been meaning to get to it" they say. But they don't get to it. This has happened on 3 separate occasions. Low maintenance is really important for entry level daily commuters.

<comment><USER3> Not everyone's route is nice and flat.

</comment></comment><comment><USER4> I like the idea, making good bikes cheap. At $999 for a fully equipped bike with disc brakes, is it really that cheap?

It seems that the belt drive is major advantage they offer at their price point. Is the chain really such a big problem for derailleur free bikes?

Even with my externally geared bike for commuting, the chain doesn't need much maintenance. I just add a dab of oil now and then and turn it in to be replaced by the shop once a year (winter salting is aggressive on chains.)</comment>


It's time to retire metrics like GDP. They don't measure everything that matters - <AUTHOR> https://www.theguardian.com/commentisfree/2019/nov/24/metrics-gdp-economic-performance-social-progress <comment><USER2> My comment from this [0] discussion two days ago:

Keep your eye on the prize, and the prize isn't measured by metrics. Any prize in the real world is something complex and complicated, hard to describe and prone to squishiness. Metrics are things that are "easy" to measure and compare across systems. Setting goals in terms of metrics is appealing and even necessary because it makes things measurable and comparable in the real world, but you need to have some cross-check where you can come back and verify that you are moving closer to your real world goal.

\---

A real world example: Consumer products are often distinguished by appearance, and surface quality is an important facet of appearance. You purchase a surface quality tester and improve the measurements produced by the surface tester to the point where you beat a competitor's surface measurements. Then you have a customer clinic and have real potential customers evaluate the two products again. Customers prefer the competitor product because you were not actually measuring attractiveness or appearance of quality, you were measuring something that the surface tester measures.

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

<comment><USER3> Right, that's why you usually want to target a basket of metrics instead of "one metric to rule them all."

It's odd that Stiglitz doesn't speak of word of the capability approach, which seems to be a step in that direction.

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

</comment></comment><comment><USER4> GDP doesn't measure _everything_ that matters, but it doesn't matter _nothing_ that matters, either. We don't need to _retire_ GDP; rather, we need to be more aware of its limitations.

My favourite example of this is childcare programs. Parents raising their children isn't counted in GDP; but parents who raise someone else's children is counted in GDP. Governments can artificially inflate GDP by enacting policies which expand the outside-of-home childcare industry; you may end up with the same number of adults providing the same quality of care to the same number of children, but GDP is magically higher.

<comment><USER5> Not to mention that society is probably better off when parents are raising their own children.

</comment></comment><comment><USER6> Indeed, let's retire all metrics! Not one of them measures everything that matters!

<comment><USER7> Have an ironic upvote.

</comment></comment><comment><USER8> I'd be happy to retire GDP when someone proposes something better.

Measuring societal progress is an important goal, which GDP measures _part_ of. So great -- how do we measure economic growth but also take into account, as Stiglitz says, externalities like resource depletion?

It feels disingenuous to bash GDP but not even try to suggest something to replace it. Don't throw the baby out with the bathwater.

<comment><USER9> Uhhh... There are tons of different measurements. Here even Stiglitz says so and then talks about others: [https://www.project- syndicate.org/commentary/new-metrics-of-...](https://www.project- syndicate.org/commentary/new-metrics-of-wellbeing-not-just-gdp-by-joseph-e- stiglitz-2018-12?barrier=accesspaylog)

Throwing the baby out with the bath water? I think it's more like throwing the bath water out to save the baby from drowning.

</comment></comment><comment><USER10> This is not a very good article.

I fully agree with the authors point that GDP at the top line metric is a disaster.

But there are several other proposed models out there. Why doesn't he mention them?

Organizations optimize around metrics so IMHO getting metrics aligned with "good" would be a huge lever against the problems the author enumerates.

But then the article just ends, doesn't mention GDI, GDSP, etc. It's weird, I wonder why.

<comment><USER11> To me, it read like a money grab and a jab at the current US administration, so it's more a political piece (it is election time) that is preaching to the choir to get donations/subscriptions. I usually like the Guardian, but this turns me off.

As you said, if it was really a genuine article trying to improve on metrics being used, it would compare similar metrics and show their limitations. GDP is a useful metric, but only when used with other metrics that show the benefits of additional production. Making more money doesn't matter if your costs rise and you end up with the same quality of life. It's kind of like comparing salaries between SF and Iowa without taking into account local costs of living.

So yes, this article is weak and feels like a political piece disguised as a legitimate criticism.

</comment></comment><comment><USER12> Let me guess: the alternative is something to do with high taxes, mass immigration, and diversity, and ignoring that troublesome thing called democracy when the proles dare vote against the unquestionably superior and enlightened perspective of the elites (ahem Brexit). How dare the great unwashed vote in their own interests!

<comment><USER13> The de-emphasis of GDP is a boon to anyone who expects their policies to be a drag on the economy. If you re-define economic success so that the mere existence of your preferred policies constitutes success, you can't lose.</comment></comment>


Knight Foundation media innovation contest 2011 winners - <AUTHOR> http://www.knightfoundation.org/press-room/press-release/knight-foundation-media-innovation-contest-announc/ <comment><USER2> Knight Foundation is awesome, they gave us (www.kiva.org) a $250k grant for our upcoming launch of Kiva Detroit.</comment>


How Alan Turing Deciphered Shark Skin - <AUTHOR> http://nautil.us/issue/68/context/how-alan-turing-deciphered-shark-skin <comment><USER2> It is rather astounding to me just how much depth of understanding Turing showed about things that were not known, studied, or conceived of during his lifetime, even in areas that are fairly unrelated to each other.

<comment><USER3> I think it wasn't just limited to turing! Several of the pioneers of mathematical computing showed astonishing foresight about how farreaching this new theory was. For example, here's Sydney Brenner talking about how much von Neumann understood about self-replication by 1950:

[https://www.youtube.com/watch?v=5Ictxz1XCiY](https://www.youtube.com/watch?v=5Ictxz1XCiY)</comment></comment>


Coronavirus Covid-19 Global Cases by Johns Hopkins CSSE - <AUTHOR> https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6 <comment><USER2> does anyone know if the code for the dashboard is open source? I can't seem to find a link.

<comment><USER3> It's ArcGIS I believe in which case most likely not.</comment></comment>


Goldman Sachs' $38MM options trading error [pdf] - <AUTHOR> http://www.sec.gov/litigation/admin/2015/34-75331.pdf

<comment><AUTHOR> It's a pretty interesting sequence of events that turned on configuration errors and humans overriding automated pauses (what the Order calls circuit breakers) without really understanding what was going on.</comment>


Support for Hello discontinued in Firefox 49 - <AUTHOR> https://support.mozilla.org/en-US/kb/hello-status?as=u&utm_source=inproduct <comment><USER2> I'd rather my browser focused on being a browser.

And I think that's better for the long term health of Mozilla, and Firefox, too.

<comment><USER3> Where would you draw the line? A PDF reader is very useful, but not a core browser component. Or Chrome tying in with all the Google services, that's not browser functionality but Google service promotion. Why does Firefox get shit for this every time?

<comment><USER4> I don't even want a bookmark manager built-in. Address bar, tabs, viewport, dev tools. Done. Make it fast.

<comment><USER5> So to the average non-developer computer-neanderthal who checks weather, movie times and news, you think it's more important to have dev tools in the standard build than bookmarks?

I find this "Give me only what I want" attitude quite frustrating. Perhaps you could argue for a more modular system that disables any given feature, but I would challenge you 8 days a week that bookmarks are a useful tool for most.

And really, bookmarks? How is that a performance hit? Maybe one would say that the "awesome bar" takes cycles to auto-search bookmarks when typing a URL, but you can disable that already.

<comment><USER4> It was an extreme example to convey a point but now I realize I didn't take it far enough. My original point was that path keeping should be handle by a standalone program for several reasons: web pages aren't the only source of paths I want to keep; my primary browser isn't the only program I want to open paths in; there is often more data I want to associate with a path like a tags, notes, user names/passwords (often more than 1 pair), etc. We already have window managers so tabs are taken care of. URLs are just like file paths... Actually, my file manager looks exactly like my browser, I just don't have an HTML/JavaScript/CSS handler that doesn't also have it's own version of a file manager. The internet is just another file system and we already have file system browsers. You're right about dev tools, that should be separate, probably best to incorporate it into gdb. I think I'm on to something here.

</comment></comment></comment></comment></comment><comment><USER6> The first thing I do on any new Firefox install is remove Pocket and Hello off the toolbar. I'm pretty sure most people do the same. In fact, I'm struggling to remember what Hello actually is...

<comment><USER7> And disable WebRTC because of local IP address leakage. Check yours at [http://net.ipcalf.com/](http://net.ipcalf.com/) :-)

<comment><USER8> why is the local ip considered private information?

99% of people are going to be in 192.168.1.0/24 or 10.1.1.0/24\. so it only takes 508 guesses.... not to mention that everyone is 127.0.0.1.

<comment><USER9> A site can very reliably identify you (across browsers, even) if it knows your public and private IP addresses. Your public IP address identifies which organization or network you're in and your private IP address identifies which machine within that organization or network you are using.

<comment><USER8> 90% of the time I use IPv6. where I just have a global IP on every device. Identifies me directly (until I grab a new ipv6 address)

</comment></comment></comment></comment></comment><comment><USER10> I was about to use it as a OS-independent alternative to Skype (I'm on Linux). And I wanted to use this, also instead of facebook chat and the likes.

The moment they removed the contacts feature it was dead for me. Although, to be honest, it never really worked (sometimes no audio and stuff like that).

The idea, that I have to first email the chat URL and then I can make a conversation is like writing a letter first before doing a call. Fundamentally wrong conversation setup.

<comment><USER11> Yes, I would rather see some more traditional FOSS video/audio/chat/screensharing solution. With an account, contact lists, account (not device) based E2E encryption* , easy to deploy server software and something that can be used from a browser (without any plugins) and native chat applications with an open standard.

* Where messages are de/encrypted readable for every device/endpoint of an account not just for the one with the active session.

<comment><USER12> All of what you asked for: [https://vector.im/](https://vector.im/) (E2E has landed recently!)

<comment><USER11> Yes, thanks. Somebody mentioned it here before, looks good.

Not sure if it can do video conferences with E2E encryption, because that could be very difficult (impossible?) or bandwidth intensive.

Now I just need to convince everyone to switch ;)

<comment><USER11> Oh, just one thing. Its apparently missing a desktop client, that isn't a web app.

I could convince more to switch if chat managers like gajim/pidgin etc. would support it out of the box.

<comment><USER12> It is not, check [http://matrix.org/docs/projects/try-matrix- now.html](http://matrix.org/docs/projects/try-matrix-now.html)

<comment><USER11> Vector Desktop an Electron that wraps the webapp and matix clients without videoconference support.

It's a good start.

<comment><USER12> Tensor and Quaternion, actually.

<comment><USER11> Tensor and Quaternion has video conferencing support?

From what I read, they are only matrix clients, not vector clients.

<comment><USER13> Vector is a client for the Matrix communications platform (perhaps calling it a communications platform is wrong, it's more general than that).

Matrix itself is just a spec / API for sending and receiving messages. Tensor and Quaternion are two other clients that work with a given Matrix home- server. AFAIK all of these clients can utilize Matrix APIs to some degree, however I'm unsure about video conferencing as I only really use Vector. That said though, other clients' capabilities don't really depend on Vector at all, unless they're using [https://vector.im](https://vector.im) as an identity server.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> THANK-YOU, finally got rid of that stupid thing. For a while there it seemed like every new Firefox version had another stupid non-browser-related plugin that I had to go find out how to kill off before deploying to the network.

<comment><USER15> > I had to go find out how to kill off before deploying to the network.

Why?

<comment><USER16> Because anything unexpected that is deployed to a network will (not may) eventually become a security and/or support nightmare for someone. Better to keep users to a minimum set of features necessary to do their job.

Yes, that sucks from a user perspective. But they don't have to fix the goddamn network at 3am because Al the Alcoholic in Accounting can't quit sending pix of his pickled junk to Betty in Brazil.

</comment></comment></comment><comment><USER17> Slightly off-topic but does anyone know the status of the "Send Tab to Device" function? It is my favorite feature on Firefox for Android and it has disappeared. Not the first time this happened, either. Are they randomly adding and then removing support for this? I'm definitely not the only one affected: [https://support.mozilla.org/en- US/questions/1087138](https://support.mozilla.org/en-US/questions/1087138).

I can visit the desktop version of Mozilla's add-ons site and see an extension which supposedly does this, but the 'add to Firefox' button is disabled if I visit the same link on my mobile. Bizarre.

<comment><USER18> Can't you automatically get the same with Firefox Sync? And indeed, it seems to me the UI has changed recently. Anyway, if you have sync enabled on both desktop and device, you can see the other sync'd devices open tabs (if enabled, what you sync is configurable). From the desktop is from the hamburger menu, "Synced Tabs" icon. From Android, you now need to go to the history pane. The first line is "Synced Devices", press this to see other tabs and open any ones as needed. So instead of explicitly selecting to send a tab to a device, just wait or force a sync (on Android: from the Settings sync page) if in a rush.

<comment><USER17> It's a bit of a crude workaround but that might work. My use-case is that I frequently browse to a site on my mobile and want to view it later on my desktop machine. I could do that with a couple clicks easily before. Now I will have to keep a bunch of tabs open on my mobile and remember to manually go and check for them when I'm back on the desktop.

Just one example, I would browse through my Twitter feed before going to sleep. Any interesting links from Twitter were sent to the desktop machine from the mobile. In the morning, I would start Firefox on the desktop and a bunch of new tabs would automatically pop open, which was great.

<comment><USER19> If you don't find it then consider Pushbullet, which has similar but improved functionality.

<comment><USER17> Just checked the Pushbullet site intending to see if they support Linux and to review their privacy policies. "Sign in with Google" or "Sign in with Facebook" are the only options on their sign in page. It does look like a cool service but not at all aligned with my privacy and open-source concerns. Thanks anyway.

<comment><USER19> Blergh, sorry. I could have sworn they had an e-mail option. Sign in with Google does allow mirror of alerts (texts, hangouts, etc) from your Android device to others but if that's not in your comfort zone so be it.

</comment></comment></comment></comment></comment></comment><comment><USER20> Is it too much to hope that pocket will be next?

<comment><USER21> The free pocket is really useless. I am helpless now identifying an alternative which would give me the ability to search for more but one tag (as is the case with pocket)

</comment></comment><comment><USER22> This is great. Mozilla experimented with a new thing, it didn't take off, and they killed it. Bravo both for experimenting, and for killing it afterwards.

</comment><comment><USER23> Wait it will be totally discontinued? Not even optional?

So basically, Hello was deemed dead from the beginning?

<comment><USER24> >So basically, Hello was deemed dead from the beginning?

As everyone predicted.

<comment><USER3> > As everyone predicted.

After seeing how everyone reacted to it, yeah, that makes it easy to "predict" people don't like it.

<comment><USER25> I think shoehorning something nobody asked for into a browser that has historically suffered from bloat and performance issues was a good indication of what the reaction would be.

<comment><USER26> So they should have not bothered trying because people were always going to conflate unrelated things?

</comment></comment></comment></comment></comment><comment><USER11> So is Jitsi Meet the only FOSS alternative?

<comment><USER24> [https://vector.im/](https://vector.im/)

<comment><USER27> vector is using FreeSWITCH for it's audio and video conferencing afaik. FreeSWITCH also has another project called Verto Communicator built with all sort of Node.js goodness: [https://freeswitch.org/confluence/display/FREESWITCH/Verto+C...](https://freeswitch.org/confluence/display/FREESWITCH/Verto+Communicator)

</comment></comment></comment><comment><USER28> Good riddance. Firefox having default plugins like this is one of the reasons i stay in v38.0

<comment><USER29> ESR 38 is still updated? I think its end of life was a few months ago...

<comment><USER30> Nope. Firefox ESR is at version 45.3.0. Firefox 38.x is insecure and should absolutely not be used.

</comment></comment></comment><comment><USER31> This is a shame it was the best chance to get people off Skype.

<comment><USER32> If you want me to eat something, don't shove it in my mouth, put it on my plate and tell me how delicious it is.

<comment><USER33> >If you want me to eat something, don't shove it in my mouth,

To continue that analogy further, perhaps babies feel insulted too.

<comment><USER32> Maybe.

The thing is the baby is incapable of reasoning. They're not capable of asking for food. They're not capable, often, of picking it up to eat it themselves. They need help but can't ask for it. They don't know what's good for them or the balance of foods to consume. They'll be hungry and throw the food on the floor .. they can't tell you "oh, sorry, I didn't mean to do that I was actually trying hard to eat it but, you know, 9 month old motor-control". Sometimes you have to just shove it in there, then watch them chew, swallow and smile and open their mouth for more.

A web browser user that wants to do video calling can use a search engine, or look up add-ons. They can respond to their browser maker putting a "we recommend SuperDoublePlusGood add-on for communicating with your friends" advert alongside the new release information. A browser add-on isn't essential to life, nor essential to using the browser.

When the baby is already eating I don't shove something else in their mouth because it's a different brand and I think that brand is better despite it doing the same thing.

Pushing analogies too far sucks.

<comment><USER33> The other extreme is, if you want what you want, go and make it yourself. Don't ask somebody else to do it for you.

In any case, defining "what something is" \-- when the nature of the product is creative, as is the case with all of programming -- isn't helpful. Nobody has to "ask". A phone can also be a web browser, it can also be a GPS navigation system, it can also be a camera, it can also be a hand held video gaming console, it can be many other things along the continuum of personal electronic devices. Essentially, you're only disagreeing with where the equilibrium is.

</comment></comment></comment></comment></comment><comment><USER34> Hello is essentially a tiny amount of javascript that connects to the existing WebRTC infrastructure. Other services will make use of this infrastructure to provide the same functionality.

But the concept of having cross-platform realtime audio, video, and screensharing is very appealing.

</comment><comment><USER35> the idea was great, probably no one ever used Hello because is was substantially broken.

</comment><comment><USER36> +1 for stripping out feature bloat!

</comment><comment><USER37> I was going to try it out -- "one of these days".

</comment><comment><USER38> I'm on 48 and don't have that feature????

<comment><USER39> I'm on 48.0.1 - right click your bookmarks toolbar or Customise it. Hello and Pocket will be options - you may well have removed them?

<comment><USER38> I have a Pocket List option but no hello option. Strange.

</comment></comment></comment><comment><USER40> As a company, Mozilla is an open-source version of Yahoo.

</comment><comment><USER41> Never used it. Didn't need it. Not sure how I would get anyone else to use it, either, as I think I'm the only one in my family/circle of friends still using Firefox.

Glad to be rid of it.

</comment><comment><USER42> Yes! Thank you, The Mozilla Foundation.</comment>


Ask HN: an intro to P=NP - <AUTHOR>

Im one of these annoying people that likes to absorb information by reading it (I find it is more sticky that way).
So, yes, the P=NP problem. It's always piqued my interest but a lot of the online material is a bit too mathematical for me to handle without some serious revision :) for stuff like this I also prefer book form. But recently I got much more to grips with the idea and it's the kind of thing I'd love to consider properly in idle moments :)
Can anyone recommend a really good book on the problem (I'm struggling to find any good recommendations). Something that isn't too math's heavy (or at least reminds you of the basics as necessary) that can walk you through the problem and set out some (non-too-mathematical) examples.
Preferably something a bit light-hearted :) <comment><USER2> "The New Turing Omnibus" has a chapter on P=NP, and is a "light hearted, not too maths-heavy" introduction to about 50 other basic problems in CS.

<comment><AUTHOR> thanks - exactly what I was after :D

</comment></comment><comment><USER3> > _recently I got much more to grips with the idea ... Something that isn't > too math's heavy ..._

You're asking for contradictory advice. If you're starting to get to grips with the idea then you want something that goes beyond the basic concepts. OTOH, you're asking not to get into the math.

Tricky.

Let's start here.

Do you know the difference between an instance and a problem? Do you know what it means for a problem to be in P? In NP? Do you know the difference between NP and NPC? Do you know a proof that a problem - any problem - is in NPC? Do you know how you would go about that?

<comment><AUTHOR> well ok perhaps I phrased it badly: I have a bit-part overview but now I would like to read about the "problem" in full with not too much maths. As far as I have seen you dont need an awful lot of maths to describe the problem

As to the latter set of questions: the answer to most is "vaguely" :) hence needing the reading material :)

<comment><USER3> There's quite a good "layman's" explanation of the problem, including some of its history, in Keith Devlin's book _"The Millennium Problems."_ The problem description starts on page 112.

In that book he also refers to the official Clay Mathematics Institute (CMI) book that gives a summary, and then the problem in detail. He also references a short film that gives a similar outline summary. The film can apparently be found at <http://www.claymath.org>

I'm sure there are dozens of descriptions of the "Does P=NP?" question on the 'net. Which ones have you read? What was unsatisfactory about them? Name three, tell me what you didn't like, and I'll try to find another for you, or write one myself.

Note: I'm not an expert, but if my knowledge is different from yours, perhaps I can help. I have proved directly that graph 3-vertex coloring is in NPC. An outline of the proof is actually here on HN if you'd care to go find it.

You still haven't answered my original questions, though.</comment></comment></comment>