<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: gcarvalho</title><link>https://news.ycombinator.com/user?id=gcarvalho</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 20 Jun 2026 01:28:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gcarvalho" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by gcarvalho in ".gitignore Isn't the only way to ignore files in Git"]]></title><description><![CDATA[
<p>To be fair, if I submit changes and don’t notice I added .vscode / .idea / my_notes.txt / .DS_Store / .swp then it was a sloppy job and I shouldn’t expect the project to adapt  to ignore every possible garbage file so that I can continue carelessly “git add .”-ing<p>I assume that’s why some open source maintainers don’t bother either - if you haven’t even looked at your diff before submitting then why should they?</p>
]]></description><pubDate>Fri, 19 Jun 2026 05:10:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48594978</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=48594978</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48594978</guid></item><item><title><![CDATA[New comment by gcarvalho in "Local Git Remotes"]]></title><description><![CDATA[
<p>I do the same sometimes, but a one-off clone is not quite the same as maintaining a "local remote" and pushing refs to it.</p>
]]></description><pubDate>Fri, 29 May 2026 16:31:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48325491</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=48325491</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48325491</guid></item><item><title><![CDATA[New comment by gcarvalho in "Full-Text Search with DuckDB"]]></title><description><![CDATA[
<p>> it's positioning itself as a drop-in replacement for SQLite<p>While SQLite is often used for comparison (“SQLite for OLAP”), I’ve never seen DuckDB market itself as a “drop-in” replacement.  Where did you see that?</p>
]]></description><pubDate>Thu, 30 Apr 2026 21:01:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47968183</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=47968183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47968183</guid></item><item><title><![CDATA[New comment by gcarvalho in "Git commands I run before reading any code"]]></title><description><![CDATA[
<p>> my guess is that someone at their previous work place had reasoned that forcing periods encouraged developers to actually write meaningful sentences<p>I have actually seen proper capitalization and correct conventional-commit types to correlate very well with the author being intentional and the patch being of good quality.<p>e.g.<p>- (a) chore: update some_module to include new_func<p>- (b) feat: Add new_func to handle XYZ case<p>Where:<p>(a) is not a chore, as it changes functionality, is uncapitalized and is so low-signal I can probably write a 10 line script to reliably generate similar titles.<p>(b) is using the correct "feat" commit type, capitalized and describe what this is for.  I expect the body to explain "why", as well, and not to reiterate the "how" in natural language.<p>This is just my experience, but I've seen commit messages where people actually put in some effort to usually come with a good patch, and vice-versa.</p>
]]></description><pubDate>Wed, 08 Apr 2026 18:49:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47694551</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=47694551</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47694551</guid></item><item><title><![CDATA[New comment by gcarvalho in "Warn about PyPy being unmaintained"]]></title><description><![CDATA[
<p>Don't forget about dmypy, the daemon version of mypy.<p><a href="https://mypy.readthedocs.io/en/stable/mypy_daemon.html" rel="nofollow">https://mypy.readthedocs.io/en/stable/mypy_daemon.html</a></p>
]]></description><pubDate>Sun, 08 Mar 2026 13:28:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47297172</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=47297172</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47297172</guid></item><item><title><![CDATA[New comment by gcarvalho in "Inputlag.science – Repository of knowledge about input lag in gaming"]]></title><description><![CDATA[
<p>I was never very good on FPS games, but during pandemics I would play often with friends.<p>One day I pop up a practice map in cs:go where one of the challenges is shooting a fixed target after it turns green.  If you don’t do it within 250ms or something (nothing crazy in terms of human reaction time), then you don’t score.<p>I was flabbergasted to see myself miss every single time.  My friend even told me “dude, are you pretending? How are you so slow?”<p>So the next day I got a new mouse and what do you know, I’m actually responding in time, and scored most of the time when the rectangle went green.  Just the mouse was not registering it fast enough.<p>Of course, that didn’t translate into such a huge boost in actual gameplay, but it’s impressive how that made me consistently miss.  Likely it had some crazy 50ms+ lag.</p>
]]></description><pubDate>Sun, 22 Feb 2026 11:35:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47110197</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=47110197</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47110197</guid></item><item><title><![CDATA[New comment by gcarvalho in "Ask HN: How do I bridge the gap between PhD and SWE experiences?"]]></title><description><![CDATA[
<p>> Only at small scales are full stack engineers valuable.<p>Seems like the ideal career is to start somewhere big and successful enough that allows you to specialize (after some poor generalists sabotaged their own careers by making it a thriving environment for specialists).  Because even small scale businesses think they should start by hiring specialists.</p>
]]></description><pubDate>Thu, 25 Dec 2025 17:34:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46385817</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=46385817</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46385817</guid></item><item><title><![CDATA[New comment by gcarvalho in "Debian 13 “Trixie”"]]></title><description><![CDATA[
<p>Looking forward to upgrade over the weekend.<p>Have had my RPi on Debian since Debian 9, with smooth upgrades every time.</p>
]]></description><pubDate>Sat, 09 Aug 2025 19:53:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44849565</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44849565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44849565</guid></item><item><title><![CDATA[New comment by gcarvalho in "I prefer human-readable file formats"]]></title><description><![CDATA[
<p>I have recently migrated ~8y of Apple Numbers spreadsheets (an annoyingly non-portable format) to plaintext accounting.<p>It took me many hours and a few backtracks to get to a point where I am satisfied with it, and where errors are caught early.  I would just suggest anyone starting now to enable --strict --pedantic on ledger-cli from the day 1, and writing asserts for your accounts as well e.g. to check that closed accounts don’t get new entries.<p>I really miss data entry being easier and not as prone to free-form text editing errors (most common are typos on the amount or copying the wrong source/dest account),  but I am confident it matches reality much better than my spreadsheets did.</p>
]]></description><pubDate>Sat, 09 Aug 2025 13:13:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44846218</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44846218</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44846218</guid></item><item><title><![CDATA[New comment by gcarvalho in "Can you block it? A simple Ad Block Tester"]]></title><description><![CDATA[
<p>I'm not sure that's what you're implying, but DNS-level blocking is not more powerful than filtering in the browser, at least in the sense of what it is <i>capable</i> of.<p>Content-filtering can and most definitely does block domains entirely, but it can also filter page elements served from the same domain which match a known ad "signature".<p>Though, if you can't run an adblocker, e.g. your Smart TV's browser then sure, DNS-level blocking is your best bet.</p>
]]></description><pubDate>Tue, 05 Aug 2025 17:40:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=44801422</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44801422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44801422</guid></item><item><title><![CDATA[New comment by gcarvalho in "Six Years of Gemini"]]></title><description><![CDATA[
<p>I can attest that CSS is very effective for obfuscating e-mail.
I displayed my academic e-mail on my webpage for over half a decade using CSS to flip the text direction[1] without getting significant spam.<p>[1] <a href="https://superuser.com/a/235965" rel="nofollow">https://superuser.com/a/235965</a></p>
]]></description><pubDate>Wed, 16 Jul 2025 16:11:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=44583929</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44583929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44583929</guid></item><item><title><![CDATA[New comment by gcarvalho in "Yet Another Zip Trick"]]></title><description><![CDATA[
<p>I’m not saying this is good security hygiene, but not necessarily everyone with access to the file will also have access to the password in the email.<p>e.g. someone downloaded the password protected zip on a public computer, logged out of their email, but forgot to delete the file.</p>
]]></description><pubDate>Sun, 06 Jul 2025 16:13:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=44481958</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44481958</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44481958</guid></item><item><title><![CDATA[New comment by gcarvalho in "Uv and Ray: Pain-Free Python Dependencies in Clusters"]]></title><description><![CDATA[
<p>I was pleasantly surprised to try the guide out and see that it just worked:<p><pre><code>    λ uv venv && uv pip install torch --torch-backend=auto
    λ uv run python -c 'import torch; print(torch.cuda.is_available())'
    True
</code></pre>
This is on Debian stable, and I don't remember doing any special setup other than installing the proprietary nvidia driver.</p>
]]></description><pubDate>Fri, 27 Jun 2025 10:04:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=44395469</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44395469</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44395469</guid></item><item><title><![CDATA[New comment by gcarvalho in "Starship: A minimal, fast, and customizable prompt for any shell"]]></title><description><![CDATA[
<p>Even if I know my current branch, having my prompt show me untracked/uncommitted/unpushed changes helps to identify if something didn’t work because I’m in a dirty state, or if something I ran (unexpectedly) caused a dirty state.<p>For example, I don’t expect running scripts/build.sh to modify tracked files in the repo.  Seeing part of the prompt go from “” to “?2!3” (two untracked, three changed files) makes that glaringly obvious.</p>
]]></description><pubDate>Tue, 24 Jun 2025 17:59:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=44368918</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44368918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44368918</guid></item><item><title><![CDATA[New comment by gcarvalho in "Switching Pip to Uv in a Dockerized Flask / Django App"]]></title><description><![CDATA[
<p>If your pyproject.toml does not list all your dependencies (including dependencies of your dependencies) and a fixed version for each, you may get different versions of the dependencies in future installs.<p>A lock file ensures all installations resolve the same versions, and the environment doesn’t differ simply because installations were made on different dates.  Which is usually what you want for an application running in production.</p>
]]></description><pubDate>Tue, 24 Jun 2025 17:48:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44368827</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44368827</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44368827</guid></item><item><title><![CDATA[New comment by gcarvalho in "Getting Past Procrastination"]]></title><description><![CDATA[
<p>I have a very involved `gq` alias that helps me find and finish pending work.  It works either in the current repository or a folder containing multiple repositories.<p>Basically, my assumption is that `gq` should return empty, which means I have a clean slate, and can start taking on new work.  Otherwise, there is ongoing work that needs attention.<p>It just lists:<p><pre><code>  * modified/untracked files
  * stashed changes
  * local-only branches (not tracking a remote branch)
  * branches out-of-sync with their upstream (either ahead or behind)
  * branches that aren't the main branch (even if tracking and in-sync with a remote upstream)
</code></pre>
Getting this command to return empty is a surprisingly effective way to stay productive, especially when losing focus due to too much work.<p>It's basically inbox-zero for git.<p>But it only works if you like working with a clean worktree.</p>
]]></description><pubDate>Sun, 08 Jun 2025 15:10:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44217477</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=44217477</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44217477</guid></item><item><title><![CDATA[New comment by gcarvalho in "Vim Language, Motions, and Modes Explained (2023)"]]></title><description><![CDATA[
<p>One thing I really appreciate about Vim is that it <i>just</i> opens. And I don't mean speed, I mean not getting bunch of pop-ups nagging me to do something about a configuration, extension, feedback or whatever.<p>I'm not going to claim Vim's defaults are usable for most people, but my god can these IDEs just shut up and let me see my code? I'll go to the settings if I want to.</p>
]]></description><pubDate>Thu, 24 Apr 2025 10:41:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=43781099</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=43781099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43781099</guid></item><item><title><![CDATA[New comment by gcarvalho in "A style of leadership that is direct and forceful, yet also respectful (2023)"]]></title><description><![CDATA[
<p>I agree story has holes but regarding<p>> The guy who wasn't actually going to work on the issue decided the time estimate of the bug, and then expected the guy who actually worked on the issue to stick to it?<p>I think he meant that if the ticket was dismissed in a much shorter time than the allotted then it also needs a good reason.<p>I also believe a bug ticket saying “this shouldn’t happen” is not solved until until “this” no longer happens or everyone involved agrees that it’s okay for it to happen.</p>
]]></description><pubDate>Sun, 23 Feb 2025 01:26:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=43145271</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=43145271</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43145271</guid></item><item><title><![CDATA[New comment by gcarvalho in "Steve's Jujutsu Tutorial"]]></title><description><![CDATA[
<p>And the martial art is jiu-jitsu, not jujutsu.  Similar sounding but definitely not “named after”.</p>
]]></description><pubDate>Sat, 19 Oct 2024 22:21:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=41891242</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=41891242</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41891242</guid></item><item><title><![CDATA[New comment by gcarvalho in "How to fork"]]></title><description><![CDATA[
<p>Re: continuing a partial rebase<p>I haven’t tried it myself, but since you know commits A and B have already been rebased and had their conflicts resolved, can’t you instead rebase -i on top of the partial-rebase branch and then drop A and B?<p>I think this way at least you still benefit from the rebase --edit-todo, which you do not when cherry-picking C^..F.</p>
]]></description><pubDate>Tue, 15 Oct 2024 06:35:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=41845604</link><dc:creator>gcarvalho</dc:creator><comments>https://news.ycombinator.com/item?id=41845604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41845604</guid></item></channel></rss>