HNHacker News
TopNewBestAskShowJobs

rom1v

2,087 karma · joined June 23, 2015

https://blog.rom1v.com
submissionscomments
rom1v··on F-Droid 2.0
They have to use one key per app, otherwise independent app could end up sharing some permissions (IIRC).
rom1v··on F-Droid 2.0
In addition to F-Droid on the device, I'd love an F-Droid "package manager client" on a computer, that allows installing apps on an Android device via adb:

    # update repo lists
    fdr update
    
    # upgrade all apps on the connected device
    fdr upgrade
    
    # search packages
    fdr search vlc  # lists org.videolan.vlc
    
    # install on the device
    fdr install org.mozilla.firefox
    
    # download the apk
    fdr download org.mozilla.firefox
    
    # uninstall
    fdr uninstall org.mozilla.firefox 
Of course, all operations would verify the signatures first.
rom1v··on English: A vs. An
"I play the piano" or "I play piano"?
rom1v··on The git history command
> `git history fixup` fixes an old commit that has something wrong in it, then autorebases all your branches to match.

Simplifying `git rebase -i` is a great idea, but unfortunately, that does not match my workflow.

I always keep an history of my branches. For example, when I develop a feature, the first version of the branch is `myfeature.1`, then `myfeature.2`, and so on. This is useful because I can retrieve an old version when something behaves differently in a newer one. (And no, `git reflog` will not help)

This has saved me multiple times. For example, I can determine that a problem was introduced between `myfeature.58` and `myfeature.59`. If the "feature" contains 15 commits, I do:

    git range-diff myfeature.58~15..myfeature.58 myfeature.59~15..myfeature.59
This lets me see the changes between the 2 versions, commit by commit (even if they don't have the same base).

I don't want all the branches containing a commit to be rebased automatically (I already try using tags for old versions instead, but this does not quite fit).

rom1v··on Why does kinetic energy increase quadratically, not linearly, with speed? (2011)
A similar question I asked a few years ago: https://physics.stackexchange.com/questions/740056/how-much-...
rom1v··on Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28
> The difference in the code is exactly one word: value.

What is unclear to me is why the decision to use a Point instance as a value or as a reference is made in the class definition rather than by the caller.

> Point[] point = new Point[10];

For the same class, I might need an array of values in one place and an array of references elsewhere within the same codebase.

rom1v··on Moving beyond fork() + exec()
Related to the discussion: "A fork() in the road": https://www.microsoft.com/en-us/research/wp-content/uploads/...

> ABSTRACT

> The received wisdom suggests that Unix’s unusual combination of fork() and exec() for process creation was an inspired design. In this paper, we argue that fork was a clever hack for machines and programs of the 1970s that has long outlived its usefulness and is now a liability. We catalog the ways in which fork is a terrible abstraction for the modern programmer to use, describe how it compromises OS implementations, and propose alternatives.

> As the designers and implementers of operating systems, we should acknowledge that fork’s continued existence as a first-class OS primitive holds back systems research, and deprecate it. As educators, we should teach fork as a historical artifact, and not the first process creation mechanism students encounter.

rom1v··on Everything in C is undefined behavior
A concrete example of undefined behavior caused by an unaligned pointer: https://pzemtsov.github.io/2016/11/06/bug-story-alignment-on...
rom1v··on Scrcpy v4.0
--keep-active ;)
rom1v··on Scrcpy v4.0
Please post a link to the issue.
rom1v··on Android developer verification: Early access starts
I want to be able to install apps from alternative app stores like F-Droid and receive automatic updates, without requiring Google's authorization for app publication.

Manually installing an app via adb must, of course, be permitted. But that is not sufficient.

> Keeping users safe on Android is our top priority.

Google's mandatory verification is not about security, but about control (they want to forbid apps like ReVanced that could reduce their advertising revenue).

When SimpleMobileTools was sold to a shady company (https://news.ycombinator.com/item?id=38505229), the new owner was able to push any user-hostile changes they wanted to all users who had installed the original app through Google Play (that's the very reason why the initial app could be sold in the first place, to exploit a large, preexisting user base that had the initial version installed).

That was not the case on F-Droid, which blocked the new user-hostile version and recommended the open source fork (Fossify Apps). (see also this comment: https://news.ycombinator.com/item?id=45410805)

rom1v··on Greg Newby, CEO of Project Gutenberg Literary Archive Foundation, has died
Are the years intended to be read in octal?
rom1v··on Answering questions about Android developer verification
> One of the most important themes we hear from the developer community is the need for more lead time to adapt to changes

No, it's not.

rom1v··on Why do some gamers invert their controls?
Why do I always invert the Y-axis but never the X-axis?
rom1v··on Malicious versions of Nx and some supporting plugins were published
I feel that Rust increases security by avoiding a whole class of bugs (thanks to memory safety), but decreases security by making supply chain attacks easier (due to the large number of transitive dependencies required even for simple projects).
rom1v··on Cloudflare 1.1.1.1 Incident on July 14, 2025
> Private DNS on Android refers to 'DNS over HTTPS'

Yes, sorry, I did not mention it.

So if you want to use DNS over HTTPS on Android, it is not possible to provide a fallback.

rom1v··on Cloudflare 1.1.1.1 Incident on July 14, 2025
On Android, in Settings, Network & internet, Private DNS, you can only provide one in "Private DNS provider hostname" (AFAIK).

Btw, I really don't understand why it does not accept an IP (1.1.1.1), so you have to give an address (one.one.one.one). It would be more sensible to configure a DNS server from an IP rather than from an address to be resolved by a DNS server :/

rom1v··on Material 3 Expressive
> By making the Send button larger and more prominent, participants were able to spot the button four times faster.

By making the Back button larger and more prominent instead, participants would be able to spot the button four times faster. I suggest to reduce the size of the Send button.

rom1v··on ChatGPT Saved My Life (no, seriously, I'm writing this from the ER)
As a non-native Ensligh speaker, I asked ChatGPT what the ER acronym means: Emergency Room (I guessed E was for "Emergency" after reading your story, but I didn't know about the 'R').

AI is also helpful to parse the story about how AI is helpful.

rom1v··on Hedy: Textual programming made easy
Precision: Of course, I meant "FOR" and "IF THEN ELSE" separately (the way I wrote it might wrongly suggest there is something like for-then-else).
rom1v··on Hedy: Textual programming made easy
I'm French too, and when I was young, I learnt the Basic language before learning English (by reading Basic programs already available on our computer).

So I was able to write FOR … THEN … ELSE blocks without even knowing what the keywords meant (I just know what they did to the program). One day, I explained to my father what I was writing, and I read out loud FOR … "TEN" … "ELCE" (with a strong French accent), and he corrected me by pronouncing the words correctly ("FOR … THEN … ELSE"). I was shocked: "how do you know?" (he knew nothing about Basic or even programming).

I learnt that day that "for", "then" and "else" were not just keywords in the Basic language, but they were actually real words in English.

rom1v··on Moon
I think this category is named ciechanow.ski.
rom1v··on XMPP: The Gem of Instant Messaging
Mandatory blog post on XMPP and decentralized protocols: https://signal.org/blog/the-ecosystem-is-moving/
rom1v··on UndefinedBehaviorSanitizer's Unexpected Behavior
> name(&data); // Illegal: passing a char* into a function that takes char*

I assume this is just a typo in the article. He probably meant `name(data)`.

rom1v··on UndefinedBehaviorSanitizer's Unexpected Behavior
> This construct works perfectly fine in C

Intuitively, I would say that this is actually undefined behavior (it would probably be difficult to expose a wrong behavior in practice though).

In C specs, I found 6.5.2.2, paragraph 9:

> If the function is defined with a type that is not compatible with the type (of the expression) pointed to by the expression that denotes the called function, the behavior is undefined.

We might discuss whether

    void (*)(char *)
is "compatible" with

    void (*)(void *)
but I think it isn't, since:

    void target(void *ptr) {}
    void (*name)(char *ptr) = target;
fails to compile with the error message:

    initialization of ‘void (*)(void *)’ from incompatible pointer type ‘void (*)(char *)’
The compiler explicitly says "incompatible pointer type".

Same for:

    void target(char *ptr) {}
    void (*name)(void *ptr) = target;
rom1v··on How to fork
Maintaining a fork by merging upstream into downstream branches would be a mess: upstream and downstream code would be totally entangled, there would no clean way to edit/remove/reorder downstream commits. You can't easily know what you actually changed (not the full diff, but each "atomic" clean change).

The way the author suggests is way cleaner IMO.

rom1v··on Git-absorb: Git commit –fixup, but automatic
Nit: Or @~2 (@ is HEAD, so @^^ is HEAD^^).
rom1v··on Git-absorb: Git commit –fixup, but automatic
> The whole branch will be squashed anyway before it's merged in

That looks like a very wrong process to me. Why would you even want to do that?

rom1v··on Git-absorb: Git commit –fixup, but automatic
https://www.mail-archive.com/dri-devel@lists.sourceforge.net...
rom1v··on Linux: We need tiling desktop environments
I used tmux before Terminator for my local usage, but the fact that a mouse selection covers all panes at once makes it really annoying.

Tmux is great for remote/shared usage though (and it survives ssh disconnection).

Page 1 of 5Next →