HNHacker News
TopNewBestAskShowJobs

frankmcsherry

781 karma · joined December 19, 2014

submissionscomments
frankmcsherry··on The benefits and costs of writing a POSIX kernel in a high-level language
I'm not at OSDI or I would have asked there, but:

1. Your skepticism for using Rust cites [26], the PLOS paper from the same people who did [27]. They've essentially recanted, in that their PLOS talk was right after Niko's keynote, and he then talked them through how interior mutability works in Rust. Other than [26], are there other lingering concerns? I could imagine so, but it would be great to take stock.

2. You don't seem to page to disk, and do OOM shootdowns instead. If you did enable disk paging, how comically bad an idea does a tracing GC become? :D Naively, I could imagine RC-GC being less horrible, but perhaps that's my built-in (and absolutely for real) bias.

frankmcsherry··on Skip – A programming language to skip the things you have already computed
Durability is a student's research project at the moment. It's up and running for "Spark" style computations but the work has broader ambitions. In essence, all of the internal state in DD are easily (automatically) serialized LSM slabs, and it is cake to write them out and read them back (and almost cake to make sense of them).

    https://eurosys2017.github.io/assets/data/posters/poster21-Lattuada.pdf
Which Kafka link is dead? The work has quiesced because any next step seems to be involve assuming something about timestamps in the input. At the same time, it seems to take about 10 lines of code to write a Kafka source or sink, minus any careful worrying about acks for durability.

The DD and Adapton approaches may be a bit tricky to hybridize. Much incremental compute works by moving through a sequence of valid configurations, and DD's main departure is generalizing this to partial orders. So, maybe you could borrow ideas, but it would probably be original research to do so.

Email is great, as it is def no longer about skiplang.

frankmcsherry··on Skip – A programming language to skip the things you have already computed
Shameless plug for something that does all of these things (perhaps not exactly as you want, but ..)

https://github.com/frankmcsherry/differential-dataflow

frankmcsherry··on Hyperkernel – A push-button approach to building provably correct OS kernels
In case you are sincerely interested, the literal very next section enumerates which other projects they borrow from and their corresponding directories in the repo. I'm sure you can come back with "the xv6 dependence is underspecified" or whatever, but maybe let's wait until it turns out you actually want to use any of this before getting excited about your troubles with the licensing.
frankmcsherry··on 7 is the largest prime followed by a cubic number
To be pedantic, shouldn't you also need to rule out the possibility that x is a negative number? For example, x = -1 satisfies your quadratic equation, but because we are doing an odd power of x you can rule it out.
frankmcsherry··on Zero-copy deserialization in Julia
This is a Rust version, btw:

   https://github.com/frankmcsherry/abomonation
It still needs me to opt in to declaring methods as unsafe, rather than automatically surfacing my uses of unsafe. I could definitely "trick users" by not doing that and pretending it always works (it doesn't).
frankmcsherry··on Java’s new garbage collector promises low pause times on multi-terabyte heaps
For people who want to fight about tracing vs ref-counting, please read this first, on how the two are dual and most collectors use both:

http://www.cs.virginia.edu/%7Ecs415/reading/bacon-garbage.pd...

frankmcsherry··on Efficiently Generating a Number in a Range
You don't need rejection sampling, but you do need a loop. It is easier to see that a finite number of samples is not sufficient:

If you have only a probability distribution defined by a product space where all distinguishable events have probability p^i, for some finite i, then any subset of the distinguishable events accumulate to a probability r * p^i for some integral r. If your goal is a probability that is not an integral multiple of p^i, you are out of luck with a finite number of samples.

frankmcsherry··on Optimizing a breadth-first search
It's a super interesting post, and I've no reason to think that iterative deepening would be better, just that it is designed to deal with exactly this problem. The lack of growth in novel states may invalidate its main hypothesis though (tree-like growth).

The Python version seems to do DFS using function calls, and I could imagine this isn't the most performant way to do it. Also, the description implies that their DFS implementation retains state; not sure what to make of it, and not a Python reader:

> Depth-First should be a bit kinder to system memory, though it'll still chew up quite a bit remembering which game states we've seen before.

frankmcsherry··on Optimizing a breadth-first search
https://en.wikipedia.org/wiki/Iterative_deepening_depth-firs...

Edit: for context, wasn't meant to be "zomg how you so dumb" so much as "everyone should also read, cause is relevant".

frankmcsherry··on How to Analyze Billions of Records per Second on a Single Desktop PC
This seems like a very unfair reading of what the author actually wrote:

> One note about the results for kdb+: The ingestion scripts I used for kdb+ partition/index the data on the year and passenger_count columns. This may give it a somewhat unfair advantage over ClickHouse and LocustDB on all queries that group or filter on these columns (queries 2, 3, 4, 5 and 7). I was going to figure out how to remove that partitioning and report those results as well, but didn’t manage before my self-imposed deadline.

frankmcsherry··on Leslie Lamport Tells Mathematicians How to Write Proofs (2014)
To paraphrase: "if it were a good idea, my books would have discussed it." Are we done here?
frankmcsherry··on Do We Need Distributed Stream Processing?
GraphX had an even-poorer showing in 2016 in the BigDatalog paper:

http://yellowstone.cs.ucla.edu/~yang/paper/sigmod2016-p958.p...

I wouldn't hold your breath on it getting faster.

Edit: and if you are interested in state-of-the-art stuff, here is a thread to start you out on the papers currently being presented at SIGMOD2018:

https://twitter.com/frankmcsherry/status/1002812204075364353

frankmcsherry··on Do We Need Distributed Stream Processing?
No, they did not only generate tuples in-memory for SABER. From the linked Flink blog post:

> Databricks made a few modifications to the original benchmark, all of which are explained in their own post: > Removing Redis from step 5 > Generating data in memory for Flink and Spark; generating data via Spark and writing it to Kafka for Kafka Streams > Writing data out to Kafka instead of to Redis

I think the authors know that the benchmark is weak. The blog post isn't (to my reading) claiming that it is proof that SABER is great so much as that the distributed stream processors need better evidence that they should exist (vs the Databricks Structured Streaming SIGMOD 2018 paper, in which the YSB benchmark is (I think) the only quantitative evaluation they do).

frankmcsherry··on A relatively simple Datalog engine
I think the point is that there is no clear reason System A must do more work than System B. Serious Datalog environments will identify strictly monotonic programs and execute them more efficiently (e.g. with racy asynchrony); they will identify linear recursion and partition work accordingly. They could identify programs corresponding to DannyBee's hypothetical purpose-build industrial winners and execute them using the exact same techniques, but apparently they don't.

I suspect the point of disagreement is

> Of course you might wish for a generic Datalog solver that you could run in a special mode where you promise that it will not encounter negation in the problem you give it. But that is then no longer a Datalog solver but a "well engineered purpose built solver".

which I don't think is correct. A Datalog solver with the property that it can run faster on certain classes of input is great; it is not "no longer a Datalog solver".

frankmcsherry··on A relatively simple Datalog engine
I'm drinking at the moment, so maybe messy but not sad.

The engine supports negation in the standard way: stratification. You can call 'from_antijoin' with a static relation for its second argument but not a variable. It is not discussed in the post because it is a bit of a diversion from the intended message (and because antijoin is computationally not much different from a filter).

If you would like a more general compute model with non-monotonic iteration, I recommend differential dataflow!

frankmcsherry··on Bloom Programming Language
How is this FAQ different from Elixir's FAQ?
frankmcsherry··on The differences between tinkering and research (2016)
Obvs he's complaining that the video didn't cite his work. :) One of the differences between researchers and tinkerers unmentioned in the article: vanity.
frankmcsherry··on The Algorithmic Foundations of Differential Privacy (2014) [pdf]
What you are looking for is "Private Information Retrieval". For the cube root result, check out: http://www.tau.ac.il/~bchor/PIR.pdf
frankmcsherry··on B-Heap vs. Binary Heap (2010)
If anyone wants to read more, there are (pre this article) papers on cache friendly/oblivious priority queues, e.g.

http://erikdemaine.org/papers/BufferTrees_STOC2002/paper.pdf

The rough gist is that if the only thing you need to be able to do is insert and pop-min, then you can buffer up roughly a page's worth of incomplete work for each page, getting amortized performance that tracks the optimal number of cache transfers at each level of the cache.

Further, in the paper above you are introduced (in the related work) to the citation:

"A. LaMarca and R. E. Ladner. The influence of caches on the performance of heaps. Journal of Experimental Algorithmics, 1, 1996."

which describes the author's "B-Heap" (at least, it describes a b-ary heap where you pick b to match your cache line/page size).

I'm guessing the problem isn't that academics don't understand these things so much that practicing programmers don't always read very much.

frankmcsherry··on Announcing Rust 1.24.1
You could probably just have a link that directs the reader to HN and posts a pre-filled "I have barely read about Rust, and it all seems over-complicated and ill-designed; convince me" comment.
frankmcsherry··on Differential Privacy for Dummies (2016)
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.366....
frankmcsherry··on Differential Privacy for Dummies (2016)
I think what they are getting at is the following, which isn't a proof or anything (if you are looking for rules to follow, the much simpler "your model isn't differentially private" is probably even more accurate):

Let X be a set of iid samples drawn from a distribution D, let M be a model trained with eps-DP on the set X, and let x' be a fresh sample from D.

Let's think about the random variable M(x'), which represents your test loss or whatever. Differential privacy says that the density of this random variable is pointwise within a factor of exp(eps) of M'(x') where M' is the random model resulting from training on X \cup { x' }. But M'(x') is distributed per a random x', random X, and M' trained on both just like your training loss or whatever.

You can push linearity of expectations through all of this to show that your expected loss on test and training should vary by at most a factor of exp(eps), but I'm not aware of a pointwise test for a specific model (and it may not make sense, as DP isn't a property of specific models, but rather distributions of them).

Edit: you can read a bit more about a special case of this at https://windowsontheory.org/2014/02/04/differential-privacy-...

frankmcsherry··on Rust 1.24
> Those compilers performed nowhere near the level of optimization that modern compilers do.

I think this gets at Wirth's law a bit. Yes compilers perform lots of optimizations now, but in Rust's case it is at least partly because they need to in order to claw back the performance that the Rust gives up with its abstraction (as seen in debug builds).

I do much prefer Rust's safe abstractions to writing more direct code and hoping I get it right. I hope (and do believe) that the MIR effort will somewhat rein in the burden shunted over to LLVM, as it is super painful for some of us.

frankmcsherry··on Rust 1.24
In my experience (with Rust programs that take 20mins+) it is all about the monomorphisation of generics. The great majority of the time is spent in LLVM, because Rust hands over many GB of LLVM IR for optimization, having done not very much (edit: in the way of code transformation) other than direct instantiation of the generic parameters.

Rust does have the opportunity to do more, and I suspect they are hoping to do more with MIR, but at the moment they rely on LLVM to optimize out all of the zero-cost abstractions that they introduce.

frankmcsherry··on Apple's privacy feature costs ad companies millions
> In theory better targeted ads allow a company to spend it's advertising budget more effectively.

I still don't see why customers want this. I would rather a company struggle to spend its ad budget effectively, and then conclude that it could better spend its resources investing in making a better product (or its employees, or its infrastructure, ..).

I don't have an econ background, so feel free to clear up what's wrong here.

frankmcsherry··on Outperforming Rust with Functional Programming
My understanding of how this shook out: https://www.reddit.com/r/rust/comments/7m99wo/outperforming_...

tl;dr: the C and Rust versions had signed integers rather than unsigned like the ATS version, and if you make that change they end up more similar.

frankmcsherry··on Machine Learning for Systems and Systems for Machine Learning [pdf]
In case anyone wants to check out some pre-history, back in 2002 Manfred Warmuth et al.[0] were using learning (Weighted Majority) to drive systems components like cache replacement policy. I'm not sure where the work went from there, but add it to the pile of techniques.

[0]: https://users.soe.ucsc.edu/~sbrandt/papers/NIPS02.pdf

frankmcsherry··on Simplistic programming is underrated
I mean, it can be, right? Take todays Advent of Code problem, where you want to grab the index of the largest element in a sequence breaking ties toward early elements, then re-distribute that element one at a time over other positions starting from the largest element (looping around as required).

I can write that using various maps, folds, flat_maps, and reduces, but no one else would understand what is going on in the code. Maybe someone will post the right idiomatic functional way to do that, but nothing elegant comes to mind.

frankmcsherry··on Zbox – Zero-knowledge, privacy-focused embeddable file system written in Rust
Or perhaps it is zero-knowledge, but about file systems. ;)
← PreviousPage 3 of 7Next →