HNHacker News
TopNewBestAskShowJobs

DanWaterworth

2,494 karma · joined March 1, 2011

submissionscomments
DanWaterworth··on The impact of Prince’s death on Wikipedia
Wow, that's a nice technique, but in this case, isn't the rendered page invalidated by changes to the source, rather than over time?

I suppose, in this case you could use the time since invalidation as your input. The downside is that changes in the source aren't immediately reflected in the rendered output, especially for infrequently updated pages.

DanWaterworth··on Aphantasia: How It Feels to Be Blind in Your Mind
No, I'm the same. I can recall a particular picture I've seen of someone's face, but I find it difficult to imagine someone's face without that cue.
DanWaterworth··on New SSA Back End for the Go Compiler (2015)
Yes. SSA intermediate representations are now common in compilers. Many will have been exposed to SSA via LLVM.
DanWaterworth··on Multiple security vulnerabilities in Rails
Turns out, deciding how to compare two strings when they may be differing lengths is tricky.
DanWaterworth··on Cuckoo: a memory-bound graph-theoretic proof-of-work system
> How would you express a 42 cycle in SAT?

That's easy. You just need to design a combinational circuit that verifies that a particular list of nodes forms a cycle.

> How much memory would that take for a billion node graph?

Naively, a lot. Thinking about it, way too much memory to be in any way practical.

However, there may be a good way to solve it with an incremental solver or, instead of materialising the graph, you could encode the siphash function in the sat solver. Then it would use much less memory.

If that works well though, it would compromise the original goal of the project.

DanWaterworth··on Cuckoo: a memory-bound graph-theoretic proof-of-work system
I think it's worth trying. I'm not confident that it would be faster, but perhaps a SAT-solver would be able to more efficiently prune the search space meaning fewer random accesses.
DanWaterworth··on Cuckoo: a memory-bound graph-theoretic proof-of-work system
The idea is one-computer, one-vote. This is easy is if you don't also want it to be decentralized.
DanWaterworth··on Cuckoo: a memory-bound graph-theoretic proof-of-work system
Interesting. I wonder how a sat solver would do with this problem.
DanWaterworth··on TSA Doesn’t Care That Its Luggage Locks Have Been Hacked
The best advice I've seen is to secure your bag with a cable tie, then you tell whether anyone's been through it.
DanWaterworth··on Compiling to WebAssembly: It’s Happening
If you want to go fast, you go alone. If you want to go far, you go together.
DanWaterworth··on What happened to Microsoft's Midori operating system project?
Meanwhile I keep wondering if MS should reinvent itself as a straight R&D company. The research and blue sky side regularly does supercool stuff. The management, strategy, and customer satisfaction cadres - maybe not so great, actually.

So true.

DanWaterworth··on Which language has the brightest future for replacing C: D, Go, Rust?
Sounds like someone needs to rigorously define a good subset then write a tool to verify that a program uses only that subset.
DanWaterworth··on Backblaze Storage Pod 5.0
> 5x the density

> so half an order of magnitude

Almost 70% of an order of magnitude.

DanWaterworth··on Backblaze Storage Pod 5.0
To clarify, I'm not saying that they wouldn't be better off with an SSD boot drive. I'm arguing that having an HDD boot drive, given their setup, isn't awful.
DanWaterworth··on Backblaze Storage Pod 5.0
Sure, that would make sense if they only had personnel in the datacenter once a month, but: "we replace about 10 drives every day" [1].

[1] https://www.backblaze.com/blog/vault-cloud-storage-architect...

DanWaterworth··on Backblaze Storage Pod 5.0
It doesn't sound like the boot drive is a single point of failure since data is stored Reed-Solomon coded in chunks across many pods. If one data drive fails, the whole pod has to go down for maintenance for it to be replaced. The only difference is that you get to choose when to take a pod down for maintenance to replace a data drive.
DanWaterworth··on Backblaze Storage Pod 5.0
When you have another 60 HDDs in the same case, I guess you think about reliability differently.
DanWaterworth··on Six years of Go
The Go faq doesn't agree with you.
DanWaterworth··on Show HN: Twitch Installs Arch Linux – A cooperative text-based horror game
wait, �ջ;Y?�2�c�Ig7aus�_1��S���^���{9��§5�?�a B'����W�E��ʧ�X*C��J�4���ѡ�s�]q������a]���
DanWaterworth··on Show HN: Twitch Installs Arch Linux – A cooperative text-based horror game
How would you know if it did?
DanWaterworth··on Show HN: Mini_printf – minimal, self-contained and verified printf()
Calling it verified seems like a stretch. When I think verified, I think seL4, CompCert, etc. The role of testing isn't verification, it's falsification.
DanWaterworth··on “gcc will quietly break nearly half of all the packages that it compiles”
It's not necessarily detectable statically.
DanWaterworth··on “gcc will quietly break nearly half of all the packages that it compiles”
Right, because you can get to the end of a non-void function without producing a value. The pointer comparison isn't necessarily UB.
DanWaterworth··on “gcc will quietly break nearly half of all the packages that it compiles”
Just read the email.
DanWaterworth··on “gcc will quietly break nearly half of all the packages that it compiles”
Since compilers (and by "compilers" I mean gcc mostly) quietly break your code behind your back, you have no way of telling whether you really fixed things or not.

Compile your test suite with -fsanitize=undefined.

DanWaterworth··on Speck – A small unit testing framework for C
When I was writing lots of C, I found that unit testing wasn't able to test for the things that I really wanted. Looking back, I think adding -fsanitize=undefined or similar to the compiler options for my test suite would have gotten me much closer to where I'd liked to have been.
DanWaterworth··on Why the Internet Needs IPFS
It's fundamentally different than Ripple. From wikipedia:

Ripple relies on a common shared ledger, which is a distributed database storing information about all Ripple accounts. The network is "managed by a network of independent validating servers that constantly compare their transaction records."

I don't think any system that relies on a global ledger is workable for micropayments like this.

Edit: I spoke too soon, Ripple is more complicated than I thought. It is somewhat like Ripple.

DanWaterworth··on Why the Internet Needs IPFS
There are a few things that I see as less than ideal with IPFS, so I recently set myself the challenge of designing a better system. I really like the way IPFS breaks down the problem, so the components remain the same.

Regarding incentivization, looking at the literature, you can split existing incentive schemes into two camps, local and global. Tit-for-tat would be an example of a local scheme, currency based systems would be global.

Neither of these types of scheme really work, with local schemes, you have no way to use accrued reputation with new nodes. Global schemes require too much coordination and overhead to be suitable for small 'transactions'.

As I understand it, IPFS deals with the problem by having a local scheme, but with a get out clause. If you want something you may have to do work on behalf of the node you want something from, but that work should be easier if you have a good reputation with other nodes in the network.

Under my proposed system, nodes keep track of how much they are in debt or in credit with the nodes that they are in contact with. The amount that you can go into debt with another node is limited to 1% of the amount of useful data that you have transferred to that node. (This way, if a node terminates a connection whilst it is in debt to another node, that loss, amortized over the useful data that you have received is very small). Nodes are incentivized keep connections open, since short lived connections have very tight reins on how much debt/credit can be accrued.

As this stands, this doesn't solve the problem. It's entirely local and there's no way to initiate connections since nodes, by default, don't trust each other.

The solution is two-fold: credit transfer and proof of work. I have designed a protocol that allows nodes to transfer credit to cancel out 'cycles of debt'. Nodes can also gain credit with other nodes by solving pointless problems. The innovation here is that when confronted with a puzzle, a node is able to delegate the work to its debtors. Proof of work is useful since, given the choice, a node would probably prefer to use its upstream bandwidth than burn up CPU time.

There are more details to this, like: the specifics of how to discover and execute a credit transfer along a long chain using only local interactions, how to incentive routing as well as data transfer and many other things.

If I had the time, I'd implement it.

DanWaterworth··on All evidence points to OOP being bullshit (2013)
It's not just monkey patching that causes problems, though it certainly doesn't help.

The advantage of going with some sort of transpiler is that you can have two kinds of code within the same process whilst you make a gradual transition. I feel like, it could be made to work, but the boundary would have to be quite heavy-weight. Think less gradual typing and more FFI.

Edit: actually, in depends on which side is doing the calling. Going from checked to unchecked code is a minefield, but if it's unchecked code calling into checked code, it could work quite well as long as the arguments are immutable and don't have methods that can do IO.

DanWaterworth··on All evidence points to OOP being bullshit (2013)
You can already write programs in this style in Ruby quite successfully, but there are advantages to having it baked into the language. It forces consistency and also opens up opportunities for tooling.

Unfortunately, I don't think it's something that can be bolted on after the fact.

← PreviousPage 5 of 24Next →