<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: chenxiaolong</title><link>https://news.ycombinator.com/user?id=chenxiaolong</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 24 Sep 2026 09:06:12 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=chenxiaolong" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by chenxiaolong in "TreasuryDirect: Prepare for ID.me – Your New Way to Log In"]]></title><description><![CDATA[
<p>I don't know if it's an A/B test, but they no longer allow adding new TOTP authenticators for my family member's account. Existing setups continue to work fine.<p>That's why I had to do the hackery of having the script pretend to be the mobile app to set that up.</p>
]]></description><pubDate>Sun, 16 Aug 2026 02:54:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=49316488</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=49316488</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49316488</guid></item><item><title><![CDATA[New comment by chenxiaolong in "TreasuryDirect: Prepare for ID.me – Your New Way to Log In"]]></title><description><![CDATA[
<p>In case anyone is interested in using TOTP two-factor authentication with their ID.md account, I made a script for setting that up: <a href="https://github.com/chenxiaolong/id-me-otpauth" rel="nofollow">https://github.com/chenxiaolong/id-me-otpauth</a><p>They used to support TOTP directly, but removed it in favor of their proprietary mobile apps. It's still TOTP under the hood though, just requires a couple API calls to "activate" it.</p>
]]></description><pubDate>Sat, 15 Aug 2026 18:47:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=49313183</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=49313183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49313183</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Go 1.27 Interactive Tour"]]></title><description><![CDATA[
<p>This release also fixes runtime.findnull() to be compatible with MTE on Android ([1] and [2]). This was the only thing preventing MTE from being enabled for apps that use gomobile on MTE-compatible Android OS's like GrapheneOS.<p>[1] <a href="https://go-review.googlesource.com/c/go/+/749062" rel="nofollow">https://go-review.googlesource.com/c/go/+/749062</a><p>[2] <a href="https://go-review.googlesource.com/c/go/+/751020" rel="nofollow">https://go-review.googlesource.com/c/go/+/751020</a></p>
]]></description><pubDate>Sun, 02 Aug 2026 02:25:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=49140483</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=49140483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49140483</guid></item><item><title><![CDATA[New comment by chenxiaolong in "WireGuard makes new Windows release following Microsoft signing resolution"]]></title><description><![CDATA[
<p>It looks like all the old files are still hosted on the server. You can just replace the version number in the download links with one of the tags from <a href="https://git.zx2c4.com/wireguard-windows" rel="nofollow">https://git.zx2c4.com/wireguard-windows</a>.</p>
]]></description><pubDate>Fri, 10 Apr 2026 21:10:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47723717</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=47723717</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47723717</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Samsung Galaxy update removes Android recovery menu tools, including sideloading"]]></title><description><![CDATA[
<p>This article isn't about the installation of regular apps. The "sideloading" it's referring to is the option to use the "adb sideload <OTA file>" command when booted into recovery mode to install OS updates. The functionality being removed is being able to install a proper OEM-signed OS update from a local file.</p>
]]></description><pubDate>Sun, 01 Mar 2026 02:56:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47203161</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=47203161</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47203161</guid></item><item><title><![CDATA[New comment by chenxiaolong in "GrapheneOS – Break Free from Google and Apple"]]></title><description><![CDATA[
<p>It's probably worth pointing out that the online process is one time and it installs a token that permanently lets the setting be toggled offline afterwards. This persists across factory resets and flashing any OS.<p>I wrote more details about it works under the hood here: <a href="https://news.ycombinator.com/item?id=35856171">https://news.ycombinator.com/item?id=35856171</a></p>
]]></description><pubDate>Wed, 18 Feb 2026 06:07:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47057744</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=47057744</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47057744</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Bootloader Unlock Wall of Shame"]]></title><description><![CDATA[
<p>NFC payments via Google Wallet running on my Pixel Watch 3 connected to a phone running GrapheneOS works just fine. I use this regularly. (It doesn't require Google Wallet to be installed on the phone.)<p>At least one of my cards required Google Play Services to have the location permission when initially adding the card though.</p>
]]></description><pubDate>Thu, 04 Dec 2025 21:04:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=46153053</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=46153053</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46153053</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Ventoy: Create bootable USB drive for ISO/WIM/IMG/VHD(x)/EFI Files"]]></title><description><![CDATA[
<p>I wrote <a href="https://github.com/chenxiaolong/MSD" rel="nofollow">https://github.com/chenxiaolong/MSD</a> for exactly that. It's a small wrapper around the Linux kernel's mass storage emulation support (CONFIG_USB_CONFIGFS_MASS_STORAGE). It can emulate a read-only optical drive, a readable disk, or a writable disk.<p>It is compatible with both older devices that configure USB via init scripts and newer devices that use Android's USB gadget HAL, but it does require Android 11+.</p>
]]></description><pubDate>Fri, 31 Oct 2025 17:42:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=45774629</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=45774629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45774629</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Why is your open source project still hosted on GitHub?"]]></title><description><![CDATA[
<p>Yeah, my GitHub Actions workflows don't do much more than `cargo build --release && cargo test --release`. I don't use any of the fancy features that would lock me in.<p>It's really just running the tests on Mac that I rely on it for. For Windows and Android, I can (and regularly do) use wine and qemu-user-static to run the tests on Linux. My project (a computationally heavy CLI tool) is simple though. It doesn't need much from the OS besides memory allocation, thread spawning, and opening a user-specified file.</p>
]]></description><pubDate>Sun, 21 Sep 2025 02:29:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=45319505</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=45319505</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45319505</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Why is your open source project still hosted on GitHub?"]]></title><description><![CDATA[
<p>For me, I begrudgingly use GitHub for my personal projects because GitHub Actions is free. If I move elsewhere, I'll have to stop providing precompiled binaries for OS's that I can't cross-compile for from Linux (eg. macOS).</p>
]]></description><pubDate>Sat, 20 Sep 2025 18:39:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45316046</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=45316046</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45316046</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Google will allow only apps from verified developers to be installed on Android"]]></title><description><![CDATA[
<p>There shouldn't be any side effects other than rendering Play Protect inert. No other AOSP component relies on this setting.</p>
]]></description><pubDate>Mon, 25 Aug 2025 20:57:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45018907</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=45018907</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45018907</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Google will allow only apps from verified developers to be installed on Android"]]></title><description><![CDATA[
<p>If this is enforced via Play Protect, then the whole mechanism can likely be disabled with:<p><pre><code>    adb shell settings put global package_verifier_user_consent -1
</code></pre>
This does not require root access and prevents Android from invoking Play Protect in the first place. (This is what AOSP's own test suite does, along with other test suites in eg. Unreal Engine, etc.)<p>I personally won't be doing this verification for my open-source apps. I have no interest in any kind of business relationship with anyone just to publish an .apk. If that limits those who can install it to people who disable Play Protect globally, then oh well.</p>
]]></description><pubDate>Mon, 25 Aug 2025 20:29:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=45018609</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=45018609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45018609</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Android now allows apps to block sideloading"]]></title><description><![CDATA[
<p>I'm curious how the check is implemented in Google Play Services. If it's based on the package manager's initiatingPackageName field, it should be trivial to bypass on rooted devices (or unrooted custom ROMs).</p>
]]></description><pubDate>Thu, 12 Sep 2024 02:21:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=41516995</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=41516995</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41516995</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Why not parse `ls` and what to do instead"]]></title><description><![CDATA[
<p>This should work with any arbitrary filename:<p><pre><code>    latest=$(printf '%s\0' <glob> | sort -zrV | head -zn1)
</code></pre>
or with long args:<p><pre><code>    latest=$(printf '%s\0' <glob> | sort --zero-terminated --reverse --version-sort | head --zero-terminated --lines 1</code></pre></p>
]]></description><pubDate>Tue, 25 Jun 2024 20:23:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=40793161</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=40793161</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40793161</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Ubuntu 24.10 to Default to Wayland for Nvidia Users"]]></title><description><![CDATA[
<p>I'd recommend giving openconnect a try. It was originally meant for Cisco VPNs, but has also supported GlobalProtect for a while now. It integrates with the NetworkManager GUI if you use that.<p>It worked flawlessly with the GlobalProtect VPN we had to use at my last job. A few folks ended up switching to using openconnect on Mac too. The official client seems to be quite bad on both platforms.</p>
]]></description><pubDate>Mon, 20 May 2024 02:30:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=40411573</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=40411573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40411573</guid></item><item><title><![CDATA[New comment by chenxiaolong in "The IMEI Code: Your phone’s other number"]]></title><description><![CDATA[
<p>Visual voicemail is when the dialer app on your phone can show the list of voicemails similar to how you would see your email inbox. You can directly play the voicemail messages and depending on the device/carrier, there might also be a text transcription of the audio.<p>Many carriers implement this via "silent SMS" + IMAP (the same IMAP as for emails). The device will send an activation or status message to the carrier's visual voicemail number and the carrier will respond with an SMS containing the IMAP credentials.<p>The version of this I'm familiar with is T-Mobile's old CVVM protocol. During initial setup, the device will send a text message containing "Activate:dt=6" to the number 122 and T-Mobile will reply with (in decoded form):<p><pre><code>    pw_len=4-9
    vs_len=10
    u=<IMAP username>
    pw=IMAP password>
    rc=0
    st=R
    ipt=148
    srv=e7.vvm.mstore.msg.t-mobile.com
    lang=1|2|3|4
    g_len=180
</code></pre>
If visual voicemail is already enabled, then sending the "Status:dt=6" SMS to 122 will also result in the same reply. Putting the credentials in an IMAP client will work and it doesn't have to go over the phone's cellular connection. You can even use curl:<p><pre><code>    curl -v imaps://<USERNAME>:<PASSWORD>@e7.vvm.mstore.msg.t-mobile.com/
</code></pre>
T-Mobile has deprecated this protocol though. New activation messages will fail with a blocked status:<p><pre><code>    rc=0
    st=B
    srv=vvm.mstore.msg.t-mobile.com
</code></pre>
T-Mobile replaced this CVVM protocol with two HTTP based protocols: "mstore" (used by OEMs like in the dialer app on Google Pixels and OnePlus devices) and "cpaas" (used by T-Mobile's first party visual voicemail app). I've been working on an open source client for mstore for use with open source Android OS's, like GrapheneOS.<p>In case anyone is interested, the vvmd wiki (visual voicemail implementation for Linux phones) has information on how several carriers implement VVM: <a href="https://gitlab.com/kop316/vvmplayer/-/wikis/Visual-Voicemail-Standards" rel="nofollow">https://gitlab.com/kop316/vvmplayer/-/wikis/Visual-Voicemail...</a>. AT&T's is especially nasty.</p>
]]></description><pubDate>Wed, 01 May 2024 02:35:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=40218925</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=40218925</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40218925</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Sorting out PIDs, Tgids, and tasks on Linux"]]></title><description><![CDATA[
<p>One area where the distinction between PIDs and TGIDs matters a whole lot is for using ptrace on processes that call execve() (eg. for something like `strace -f`). In can be pretty tough to ensure that tracer's internal state matches reality: <a href="https://man.archlinux.org/man/ptrace.2#execve(2)_under_ptrace" rel="nofollow">https://man.archlinux.org/man/ptrace.2#execve(2)_under_ptrac...</a></p>
]]></description><pubDate>Sun, 24 Mar 2024 18:54:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=39809316</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=39809316</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39809316</guid></item><item><title><![CDATA[New comment by chenxiaolong in "General Motors Quits Sharing Driving Behavior with Data Brokers"]]></title><description><![CDATA[
<p>No worries! Thanks for the hint about the date -- I didn't know that was a function in the equation. Changing the date back to 2023 actually allowed the 19190301 code (had a typo in my original post) to work, though it seems they've removed the telematics switch unfortunately. Some day, I'll have to figure out how to disconnect the antenna.</p>
]]></description><pubDate>Sat, 23 Mar 2024 19:57:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=39802678</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=39802678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39802678</guid></item><item><title><![CDATA[New comment by chenxiaolong in "General Motors Quits Sharing Driving Behavior with Data Brokers"]]></title><description><![CDATA[
<p>Any chance you happen to know the latest code to get into the hidden menu on the EV6? Used to be 19190307, though it was changed in the 231215 infotainment firmware update.</p>
]]></description><pubDate>Fri, 22 Mar 2024 23:24:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=39795906</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=39795906</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39795906</guid></item><item><title><![CDATA[New comment by chenxiaolong in "Terminal Latency"]]></title><description><![CDATA[
<p>It looks like it is packaged in the official Fedora repos: <a href="https://packages.fedoraproject.org/pkgs/foot/foot/" rel="nofollow">https://packages.fedoraproject.org/pkgs/foot/foot/</a></p>
]]></description><pubDate>Wed, 20 Mar 2024 03:23:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=39762603</link><dc:creator>chenxiaolong</dc:creator><comments>https://news.ycombinator.com/item?id=39762603</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39762603</guid></item></channel></rss>