HNHacker News
TopNewBestAskShowJobs

ubolonton_

358 karma · joined February 4, 2014

[ my public key: https://keybase.io/ubolonton; my proof: https://keybase.io/ubolonton/sigs/s9i87kU9LiXHJ0zEuuvoquu0mV3-TZ1JLev_cXyfGWQ ]
submissionscomments
ubolonton_··on Observability 2.0 and the Database for It
I introduced ClickHouse at my company 2 years ago, and came to the same conclusion.

For observability, it seems to have become the dominant storage choice for new observability startups.

And the newly introduced JSON type would help it winning even harder.

ubolonton_··on Parsing: The Solved Problem That Isn't (2011)
Ok, understood. I was confused by the phrase "parse of that tree".

Tree-sitter's output is closer to being "dynamic" than "untyped", though.

It's not too hard to build a layer on top of tree-sitter (out of the core lib) to generate statically typed APIs. I haven't felt the need for that yet, but it may be worth exploring.

> actually process/compile it

At work, I built a custom embedded DSL, using tree-sitter for parsing. It has worked well enough so far. The dynamically-typed nature of tree-sitter actually made it easier to port the DSL to multiple runtimes.

> provide 100% accurate code intelligence

Totally agree that tree-sitter cannot be used for this, if we are aiming for 100%.

ubolonton_··on Parsing: The Solved Problem That Isn't (2011)
What do you mean by “parse of that tree to get useful structures out”? Can you provide some concrete examples?
ubolonton_··on Comprehensive Keyboard Handling in Terminals
In Emacs, local-function-key-map has this entry:

    C-x @ s                   event-apply-super-modifier
So to get s-g to work, you'd configure the terminal emulator to convert the Command+G key press to the C-x @ s g sequence.

    # Hex code (iTerm)
    0x18 0x40 0x73 0x67

    # kitty (without Emacs doing the integration)
    map cmd+g send_text all \x18@sg
Konsole somehow seems to have this done for the whole English alphabet, so it just works out of the box there.

For 2-modifier bindings, I guess you can add a creative entry to local-function-key-map. (If the other modifier is Shift, you can just use uppercase letters.)

ubolonton_··on Tree-sitter: an incremental parsing system for programming tools
When tree-sitter reaches 1.0 [0], it may be possible to eliminate the tree-sitter-langs upstream, or both.

[0]: https://github.com/tree-sitter/tree-sitter/issues/930

ubolonton_··on Tree-sitter: an incremental parsing system for programming tools
> the query DSL would be a bit more sophisticated, allowing you to specify the actual name resolution rules of your language.

This sounds very interesting. Will the query DSL (spec) be available to the public?

ubolonton_··on U.S. Telcos Sold Highly Sensitive Customer GPS Data Typically Used for 911 Calls
This is probably between the baseband firmware and the SIM card, so rooting wouldn't help. And it's using A-GPS (probably in MSA mode, where the location is derived on the servers, not the phones), not just cell tower triangulation.
ubolonton_··on U.S. Telcos Sold Highly Sensitive Customer GPS Data Typically Used for 911 Calls
It appears that you will be able to opt out of Apple's new Enhanced Emergency Data. However, that part is device-initiated anyway. The traditional Network-Initiated Location Requests probably cannot be opted out of.
ubolonton_··on Using Rust in Mercurial
https://magit.vc/
ubolonton_··on The largest Git repo
It's easier to see commits of a branch grouped together in most history viewers. Even though sorting commits topologically can help, most history viewers don't support that option.

When there is an undesired behavior that is hard to reason about, git-bisect can be used to determine the commit that first introduced it. With a normal merge, it will point to the merge commit, because it was the first time the 2 branches interacted. With a rebase, git bisect will point to one of the rebased commits, each of which already interacted with the branch coming before.

Resolving conflicts in a big merge commit vs in small rebased commits is like resolving conflicts in a distributed system by comparing only the final states, vs inspecting at the actual sequences of changes.

ubolonton_··on Airflow and the Future of Data Engineering: A Q&A
Thanks! I skimmed through the doc. It looks very clean from a high-level view.
ubolonton_··on Buttery Smooth Emacs
You can configure the terminal emulator to emit a specific sequence for hyper/super, then configure Emacs to convert it back using local-function-key-map: http://unix.stackexchange.com/questions/79374/are-there-any-....

Out of the box, Konsole+Emacs do this with super.

ubolonton_··on Stop Trying to Catch Me
In Python it's possible, with the use of destructors (like in Twisted). I don't think it's possible in Javascript.
ubolonton_··on Firefox 36.0 released
I use Conkeror http://conkeror.org/.
ubolonton_··on Fix conflicts only once with Git rerere
Supposed there is an undesirable behavior caused by some subtle interaction of features coming from 2 branches.

With a normal merge, git bisect will likely point to the merge commit as the first commit that introduced the behavior, which was the first time these 2 branches ever interacted. This means resolving inconsistencies after the fact, somewhat similar to "eventual consistency". It is more coarse-grained, can be harder to reason about, but may scale better (no serialization).

With a rebase, git bisect will point to one of the rebased commits, each of which already interacted with the branch coming before. Rebasing is sort of similar to the situation where DB client retries a transaction because the DB doesn't know how to serialize 2 transactions. It is more fine-grained, can be easier to reason about, but may have problems scaling, and may sometimes be tedious.

ubolonton_··on Master Concurrent Processes with core.async
I think Pulsar supports this model: http://docs.paralleluniverse.co/pulsar/#error-handling.

Incidentally, in the javascript port of core.async, we are also trying to come up with a good error handling story [1]. One approach we are considering is (sort of) adapting the Erlang model, by treating goroutines' return channels as their identities. I'm researching error handling in CSP literature and prior implementations as well.

[1]: https://github.com/ubolonton/js-csp/issues/14

ubolonton_··on Testing Emacs Packages: surprisingly non-awful
Practical Common Lisp: http://www.gigamonkeys.com/book/
ubolonton_··on Firefox 27 Released
I have recently started to port core.async to Javascript, inspired by that post. It looks promising so far. https://github.com/ubolonton/js-csp