HN user

rom1v

2,076 karma

https://blog.rom1v.com

Posts33
Comments137
View on HN
f-droid.org 8mo ago

What we talk about when we talk about sideloading

rom1v
1516pts629
android-developers.googleblog.com 9mo ago

Answering questions about Android developer verification

rom1v
109pts122
www.youtube.com 1y ago

Veritasium: How Will AI Change Education? [video]

rom1v
7pts1
daniel.haxx.se 1y ago

The QUIC API OpenSSL will not provide (2021)

rom1v
28pts10
www.youtube.com 1y ago

Neural Networks (3Blue1Brown) [video]

rom1v
1pts0
github.com 1y ago

Scrcpy 3.0 adds Android virtual displays feature

rom1v
5pts0
github.com 1y ago

Scrcpy 3.0 adds virtual displays feature

rom1v
2pts0
www.youtube.com 1y ago

How are holograms possible? – 3blue1brown [video]

rom1v
2pts0
github.com 1y ago

Scrcpy 2.7 adds gamepad support to play Android games

rom1v
2pts0
github.com 1y ago

Scrcpy 2.7 adds gamepad support to play Android games

rom1v
2pts0
daniel.haxx.se 1y ago

Slow TCP Connect on Windows

rom1v
21pts1
pikuma.com 1y ago

How Playstation Graphics and Visual Artefacts Work

rom1v
6pts0
mywiki.wooledge.org 2y ago

Avoid "set -o pipefail" in bash

rom1v
3pts1
github.com 2y ago

Scrcpy 2.2 adds Android camera mirroring

rom1v
138pts34
github.com 3y ago

Scrcpy 2.0 mirrors Android devices with audio forwarding

rom1v
250pts60
webkit.org 3y ago

Locking in WebKit (2015)

rom1v
1pts0
www.youtube.com 3y ago

Lectures by Walter Lewin. They will make you ♥ Physics [video]

rom1v
6pts1
lwn.net 3y ago

Debian to vote on its firmware path

rom1v
6pts1
ciechanow.ski 3y ago

Alpha Compositing

rom1v
2pts0
blogs.gnome.org 4y ago

Towards Gnome Shell on mobile

rom1v
3pts0
lwn.net 6y ago

The Compact C Type Format in the GNU Toolchain

rom1v
1pts0
textslashplain.com 6y ago

Spying on HTTPS

rom1v
257pts115
android-developers.googleblog.com 6y ago

Android Gesture Navigation: A Backstory

rom1v
8pts2
github.com 7y ago

USBaudio: Redirect sound from Android device to computer over USB

rom1v
2pts0
github.com 7y ago

Scrcpy v1.9 (screen-mirroring app) released

rom1v
2pts0
github.com 7y ago

Scrcpy v1.9 (Android screen-mirroring app) released

rom1v
2pts0
blog.rom1v.com 7y ago

A new core playlist for VLC 4

rom1v
214pts159
github.com 7y ago

Show HN: Record your Android screen with "scrcpy --record file.mp4"

rom1v
1pts1
github.com 7y ago

Show HN: Record your Android screen with “scrcpy --record file.mp4”

rom1v
2pts1
github.com 8y ago

Show HN: Forward audio from Android device to computer

rom1v
1pts1

`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).

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.

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.

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)

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 :/

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.

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.

Moon 2 years ago

I think this category is named ciechanow.ski.

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;
How to fork 2 years ago

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.

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).

I think tiling is great for terminals, but not for the whole desktop (I don't want my web browser or video player to be resized because I open a new program).

So I use a "normal" floating environment (xfce, but could be another one), and I use Terminator in full screen enabled on a specific shortcut, so that I have tiled terminals.