HNHacker News
TopNewBestAskShowJobs

rusanu

996 karma · joined April 4, 2014

Robot at UiPath Former SQL Server engine dev at MS.
submissionscomments
rusanu··on A Russian Family Was Isolated for 40 Years, Unaware of WWII (2013)
Some claim that that hunter-gatherers spent most of the time for leisure and only 15-20 hours a week for foraging/hunting [0].

[0] https://en.wikipedia.org/wiki/Original_affluent_society

rusanu··on A Russian Family Was Isolated for 40 Years, Unaware of WWII (2013)
The first video would be one that would show you how a large battery and a USB drive are not enough for survival, if only you would have something to watch the video on :)
rusanu··on A Russian Family Was Isolated for 40 Years, Unaware of WWII (2013)
The Danube delta has a fairly large population of old believers https://en.wikipedia.org/wiki/Lipovans
rusanu··on A Russian Family Was Isolated for 40 Years, Unaware of WWII (2013)
Bog iron [0] production was the predominant way of smelting iron before technology advanced to the point of being able to smelt iron ores. Iron Production in the Viking Age [1] has a really nice description and pictures of the process. This kind of smelting can be done with a small bloomery [2] and the resulted tiny iron specs result is called sponge iron. I wish Dwarf Fortress would implement this chain for environs that lack proper iron ores :)

[0] https://en.wikipedia.org/wiki/Bog_iron

[1] http://www.hurstwic.org/history/articles/manufacturing/text/...

[2] https://en.wikipedia.org/wiki/Bloomery

rusanu··on The 9,000-Mile Sea Journey of an Irradiated Indian Mango
The article says the smae about Indian mangoes destined for EU:

> The European Union lifted its own ban on Indian mangos this summer, but does not approve of irradiation treatment. Mangos destined for Europe are instead submerged in water at 48 degrees Celsius.

rusanu··on Flexible Paxos: Quorum intersection revisited
Book recommendation: Specifying Systems: The TLA+ Language and Tools for Hardware and Software Engineers [0]. I did read it, but unfortunately I can't say I actually understood it as in to be able to use it day-to-day.

[0] https://www.amazon.ca/Specifying-Systems-Language-Hardware-E...

rusanu··on Flexible Paxos: Quorum intersection revisited
TL;DR summary (to my understanding, no sane human can ever claim it can summarize Paxos):

The claim is that, once a leader is elected (ie. Q1), is no longer necessary to attain a majority quorum for actually accepting writes (ie. Q2). A minority quorum can accept writes, provided the minority contains at least one node that participated in the leader election. By increasing the leader election quorum number to higher than N/2+1 (as to have a sufficient number of nodes that participated in the Q1 election), the cluster can then operate much faster because writes require only minority quorum. The drawback is that it no longer tolerates N/2-1 failures, as N/2-1 failures leaves too few electors to choose a new leader in Q1.

NB. the Paxos terminology uses terms like 'decide a value', but practically in clusters this is equivalent to 'accept writes' so I used that instead for easier comprehension.

rusanu··on Flexible Paxos: Quorum intersection revisited
Related discussion of the 'A More Flexible Paxos' blog quoted in the paper: https://news.ycombinator.com/item?id=12292590
rusanu··on Checking the C# Source Code of MSBuild with PVS-Studio
- StyleCop https://en.wikipedia.org/wiki/StyleCop

- FxCop https://en.wikipedia.org/wiki/FxCop

- Prefast https://msdn.microsoft.com/en-us/library/d3bbz7tz.aspx

- Code Analysis Check-In policies https://msdn.microsoft.com/en-us/library/ms182075.aspx

There are more tools like these and at the time I left there were still more popping up. I hated StyleCop, the Tabs vs. Spaces Sillicon Valley episode is very relevant for my relation with StyleCop...

rusanu··on Checking the C# Source Code of MSBuild with PVS-Studio
Microsoft runs internally similar tools. The usual deal is that grandfathered issues (ie. issues found by new code analysis tools on old code base) are generally not fixed, and the warning is instead silenced (all tools have means to suppress specific warning for specific code place). This is done because the risk to fix a code analysis issue on old code base is often higher than the benefit.

New code on the other hand is usually required to pass all static analysis without introducing new warnings, and is often enforced by automated code review (bots that runs static analysis will mark the code review and it will not be possible to check it in).

From time to time some teams form to work on fixing static analysis code warnings on old code, but is not a high priority. Of course a public PR event like the OP may trigger some action, is going to be up to the individual team priorities, policy, schedule, workload etc.

This may sound like laziness or carelessness, but these are good engineers with plenty of experience that are capable of judging risk vs. benefits. If the code was like this for years and no actual bug was reported, is not always worth modifying it. Eric Lippert has a nice blog about How many Microsoft employees does it take to change a lightbulb? [0] and why some of these 'trivial' changes for a small project add up to a risky change at MS scale.

- [0] https://blogs.msdn.microsoft.com/ericlippert/2003/10/28/how-...

rusanu··on Why GNU grep is fast (2010)
Correct. I've read the original post years ago, I do find it it fascinating, and I would like every new generation to read it. I don't have a quarrel with it making HN front page every now and then.
rusanu··on Why GNU grep is fast (2010)
Previous discussions:

- https://news.ycombinator.com/item?id=1626305 (115 comments, 2193 days ago)

- https://news.ycombinator.com/item?id=2393587 (68 comments, 1972 days ago)

- https://news.ycombinator.com/item?id=2860759 (43 comments, 1842 days ago)

I'm sure there are more.

rusanu··on The Windows 95 User Interface: A Case Study in Usability Engineering (1996)
SSMS' backup dialog has to show the server filesystem, exposed over a TDS protocol. This means the implementers cannot use any off-the-shelf OS/Shell file selector dialog (comdlg) and had to design their own. Any 'advancement' in the OS/Shell dialogs would have to be 'matched', manually, in the SSMS code base. I'm not trying to defend the visual appearance of the said dialog, I'm just trying to give context why that particular file selection dialog has nothing to do with the OS/Shell file selection dialogs. Think at it more like a query result browsing dialog.
rusanu··on From Fins into Hands – Scientists Discover a Deep Evolutionary Link
For anyone interested in the (broader) subject there is a surprisingly readable book on the topic: Gaining Ground: The Origin and Evolution of Tetrapods [0]

Interestingly enough, in this book I've learned about yet another meaning of the term 'process' (ie. a prominence or projection, as from a bone), when I realized what it means in the context I had to go back some 20 pages and read again :)

[0] https://www.amazon.com/Gaining-Ground-Second-Evolution-Tetra...

rusanu··on Bill Gates fund invests in Australian startup Atomo
http://atomodiagnostics.com/
rusanu··on Greenland shark found to be at least 272 years old
"Because radiocarbon dating does not produce exact dates, they believe that she could have been as "young" as 272 or as old as 512. But she was most likely somewhere in the middle, so about 400 years old."

BBC went with 400 in the title :) [0]

[0] http://www.bbc.com/news/science-environment-37047168

rusanu··on Show HN: Give 7B people an instant physical address
Obviously we need to add the date the coordinates were encoded. The decoding will have to apply correction based on ample databases of tectonic data. A simple formula will not work, a major earthquake can move a rift by some 5-10 cm. And you need to know exactly what plate does the coordinate refer to, is not as simple as 'Australia moves 7cm a year', consider parts of California east vs. west of the fault. Well, that spiraled out of control fast... It makes the time issues like [0] seem trivial by comparison.

[0] http://stackoverflow.com/questions/6841333/why-is-subtractin...

rusanu··on Show HN: Cuckoo Filter Implementation in Go, Better Than Bloom Filters
This is basically a hash collision, two keys hash to the same digest. You'd need to add refcount to keep track, same as bloom counting filters [https://en.wikipedia.org/wiki/Bloom_filter#Counting_filters]
rusanu··on Show HN: Cuckoo Filter Implementation in Go, Better Than Bloom Filters
The paper also cites the main advantage of cockoo filters over bloom: ability to remove a key. (Vanilla) bloom require a rebuild of the entire filter if a key is removed from the set. There are more details in the paper, seems a good read (I'm going though it now)
rusanu··on Show HN: Cuckoo Filter Implementation in Go, Better Than Bloom Filters
Bloom filters are [one of?] the most used 'negative cache' structures. Consulting a bloom filter can give a decisive answer that a key is not in a collection (ie. a key was never hashed). You can then avoid a (supposedly more expensive) lookup. I used bloom filters often in my database work.

I was not familiar with cockoo filters (I am familiar with cockoo hash though), using them as a 'better bloom' seems to be a relatively new development. A quick googling found 'Cuckoo Filter: Practically Better Than Bloom' [https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf].

rusanu··on How to use your full brain when writing code
Your manager/team lead should be shielding you from such
rusanu··on Why Uber Engineering Switched from Postgres to MySQL
In my experience DB connections are overwhelmingly idle. Even if you omit the obvious dead times between requests and consider only actively executing connections, a request will spend most of the time waiting for a resource or another (read IO, commit flush, latches, locks). It takes an extraordinarily well tuned app to be able to drive all connections to be anywhere near 100% CPU bound and never conflict or wait.
rusanu··on Fast Transaction Log: Windows
> Like quite a bit of other Win32 APIs (WriteGather, for example), it looks tailor made for database journaling.

Indeed, WriteFileGather and ReadFileScatter are specifically tailored for writing from and reading into the buffer pull. The IO unit is the sequential layout of an extent (8 pages of 8Kb each), but in memory pages are not sequential so they have to be 'scattered' at read and 'gathered' at write.

You also have to keep in mind that the entire IO stack, Windows and SQL Server, was designed in the days of spinning media where sequential vs. random access was ~80x faster. SSD media has very different behavior and I'm not sure the typical 'journaling' IO pattern is capable of driving it to the upper bound of physical speed.

As a side note, I was close some folk that worked on ALOJA http://hadoop.bsc.es/ and it was a very interesting discussion I had with them: the default configuration for Java/Hadoop was providing, out of the box, the best IO performance on Linux. Same configuration was a disaster on Windows and basically every parameter had to be 'tuned' to achieve decent performance. This paper has some of their conclusions: https://www.bscmsrc.eu/sites/default/files/bsc-msr_aloja.pdf

rusanu··on Apple Open-Sources its Compression Algorithm LZFSE
I assume is "one return only per function" rule http://programmers.stackexchange.com/questions/118703/where-...
rusanu··on Sun's galactic journey linked to mass extinctions (2013)
Rubin-Ford effect

https://en.wikipedia.org/wiki/Vera_Rubin#Galaxy_rotation_pro...

rusanu··on Intro to kernel debugging
> In the Hyper-V settings for the VM, set COM 1 to use a Named Pipe

I used to have an RS-232 cable in my office, for Kernel debugging. Before VM prevalence the debugged and the debugee would be two physical machines, linked with a physical cable over their COM ports. Once the VPC/VirtualServer came out with COM redirect and the debugger support for it, I never looked back.

rusanu··on Simple Windows GUI Application Written in Go
How long until we see the go equivalent of pinvoke.net ? http://www.pinvoke.net/

Ideally this sort of platform import should be automated so that Win32 specific apps could import the more advanced GUI stuff (comdlg et all).

rusanu··on They knew it was round, damn it
Madagascar should be related to India, though. Separated 80mil years ago, if I remember correctly.
rusanu··on Spark as a Compiler: Joining a Billion Rows per Second on a Laptop
OP points to SPARK-12795 [0] and is all open source. They generate Java source code. You can read more at the prototype pull request: https://github.com/apache/spark/pull/10735 (I couldn't find a spec doc). If I understand correctly they insert a `WholeStageCodegen`[1] operator into the plan:

    /**
     * WholeStageCodegen compile a subtree of plans that support codegen together into single Java
     * function.
     *
     * Here is the call graph of to generate Java source (plan A support codegen, but plan B does not):
     *
     *   WholeStageCodegen       Plan A               FakeInput        Plan B
     * =========================================================================
     *
     * -> execute()
     *     |
     *  doExecute() --------->   inputRDDs() -------> inputRDDs() ------> execute()
     *     |
     *     +----------------->   produce()
     *                             |
     *                          doProduce()  -------> produce()
     *                                                   |
     *                                                doProduce()
     *                                                   |
     *                         doConsume() <--------- consume()
     *                             |
     *  doConsume()  <--------  consume()
     *
     * SparkPlan A should override doProduce() and doConsume().
     *
     * doCodeGen() will create a CodeGenContext, which will hold a list of variables for input,
     * used to generated code for BoundReference.
     */



[0] https://issues.apache.org/jira/browse/SPARK-12795 [1] https://github.com/apache/spark/blob/0e70fd61b4bc92bd744fc44...
rusanu··on Spark as a Compiler: Joining a Billion Rows per Second on a Laptop
Transaction Processing: Concepts and Techniques [0] by Jim Gray and Andreas Reuter. Not so much relational algebra, but everything you need to know to implement a classic relational engine.

[0] https://www.amazon.com/Transaction-Processing-Concepts-Techn...

← PreviousPage 4 of 6Next →