<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Disqus - Latest Comments for thomashabets</title><link>http://disqus.com/by/thomashabets/</link><description></description><atom:link href="http://disqus.com/thomashabets/comments.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Wed, 15 Oct 2025 20:19:17 -0000</lastBuildDate><item><title>Re: No way to parse integers in C</title><link>https://blog.habets.se/2022/10/No-way-to-parse-integers-in-C.html#comment-6783026176</link><description>&lt;p&gt;I meant what I said, in that I read it as POSIX not using undefined behavior (UB) the way the C standard does. Because that would make no sense. UB on a valid text buffer input, that happens to contain a value that can't be represented? That would make &lt;code&gt;atoi()&lt;/code&gt; and friends just about as impossible to use correctly as &lt;code&gt;gets()&lt;/code&gt;, which would be crazy. They even removed &lt;code&gt;gets()&lt;/code&gt; from C11 for this reason.&lt;/p&gt;&lt;p&gt;… and now I checked C17, which has the exact same wording.&lt;/p&gt;&lt;p&gt;WTF? You are technically correct. I cannot imagine any implementation actually taking advantage of this UB, but you're right. Another reason &lt;code&gt;atoi()&lt;/code&gt; and friends is useless.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Wed, 15 Oct 2025 20:19:17 -0000</pubDate></item><item><title>Re: Dropping privileges</title><link>https://blog.habets.se/2022/03/Dropping-privileges.html#comment-6770293343</link><description>&lt;p&gt;Yeah your edit should work. You don't need the parent to die, though, it can just wait for the child. This would be necessary for anything interactive to work.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Fri, 19 Sep 2025 03:29:31 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6769758960</link><description>&lt;p&gt;Wow, you're just doubling down on explaining my own blog post to me, now with almost twice as much explanation.&lt;/p&gt;&lt;p&gt;This is really weird if you. I wrote the post. I don't know how you think I'm able to write a blog post without understanding it.&lt;/p&gt;&lt;p&gt;It's also ironic that you're doing this while using a very non-standard capitalisation of the name of the language.&lt;/p&gt;&lt;p&gt;I'm not asking what Go is doing. I'm saying that what Go is doing stupid and bad.&lt;/p&gt;&lt;p&gt;This is as if I'd written a blog post about how in perl "$foo" is not the same variable as "@foo", and if I print "@foo" that's the second variable and when I print "$foo" it's the former. But to get the the first element of "@foo" I use "$foo[0]", which has nothing to do with "$foo".&lt;/p&gt;&lt;p&gt;If I say that's bad, it doesn't mean I'm saying I don't understand it. It means I'm saying it's bad.&lt;/p&gt;&lt;p&gt;You don't need to explain to me when to use $ and when to use @ in perl.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Thu, 18 Sep 2025 02:56:21 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6769596946</link><description>&lt;p&gt;I'm not sure why you're mansplaining my own blog post to me.&lt;/p&gt;&lt;p&gt;I am aware. I wrote the post.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Wed, 17 Sep 2025 18:07:26 -0000</pubDate></item><item><title>Re: Bug Reports &amp; Feedback: Did my site get deleted?</title><link>https://disqus.com/home/discussion/channel-discussdisqus/bug_reports_feedback_did_my_site_get_deleted/#comment-6762052102</link><description>&lt;p&gt;A follow-up: I contacted support, and they recovered my deleted site. They don't know how it got deleted. Which is… uh… very strange.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Wed, 03 Sep 2025 10:45:18 -0000</pubDate></item><item><title>Re: Bug Reports &amp; Feedback: Did my site get deleted?</title><link>https://disqus.com/home/discussion/channel-discussdisqus/bug_reports_feedback_did_my_site_get_deleted/#comment-6761433276</link><description>&lt;p&gt;Thanks again!&lt;/p&gt;&lt;p&gt;I've emailed them. I'm very curious if someone from reddit managed to get it deleted because I wrote a post critiquing the Go programming language. :-/&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Tue, 02 Sep 2025 06:29:47 -0000</pubDate></item><item><title>Re: Bug Reports &amp; Feedback: Did my site get deleted?</title><link>https://disqus.com/home/discussion/channel-discussdisqus/bug_reports_feedback_did_my_site_get_deleted/#comment-6761427453</link><description>&lt;p&gt;Hi Kieran.&lt;/p&gt;&lt;p&gt;I can't find a site named "blargh" in my admin panel. I only see two other sites, shortnames "synscan" and "habetspp".&lt;/p&gt;&lt;p&gt;Per the troubleshooting page you linked (thank you), I have added &lt;a href="http://habets.se" rel="nofollow noopener" target="_blank" title="habets.se"&gt;habets.se&lt;/a&gt; and &lt;a href="http://blog.habets.se" rel="nofollow noopener" target="_blank" title="blog.habets.se"&gt;blog.habets.se&lt;/a&gt; to both sites I have in the admin panel. But since they're not "blargh", I'm not surprised that it didn't help.&lt;/p&gt;&lt;p&gt;I have now also registered the shortname, by creating a new site. That made disqus load again. But all the comments are gone!&lt;/p&gt;&lt;p&gt;Could you confirm whether or not my site was deleted? I think someone must have deleted it. How else could I have been able to create it now with the same shortname?&lt;/p&gt;&lt;p&gt;It is possible to restore the deleted comments?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Tue, 02 Sep 2025 06:08:31 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6758512303</link><description>&lt;p&gt;That's almost by definition. The present tense self version of being wrong is a contradiction.&lt;/p&gt;&lt;p&gt;Given arguments I can become wrong past tense. But most disagreeing arguments seem to be "you're stupid and/or new to Go" or "you must be miserable". Those are not exactly learning opportunities. Others agree with me.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Wed, 27 Aug 2025 10:38:47 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6757602704</link><description>&lt;p&gt;I'm not the hero you deserve, just the hero you need.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Mon, 25 Aug 2025 14:48:26 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6757071033</link><description>&lt;p&gt;You don't need to explain my own blog post to me, thanks. I'm complaining about shitty interface decisions. So clearly I understand them.&lt;/p&gt;&lt;p&gt;They're working as intended, but the intentions are bad.&lt;/p&gt;&lt;p&gt;You have no idea what I know about memory. It's not in this post, or any other post of mine.&lt;/p&gt;&lt;p&gt;I'm sorry for what my blog post did to you or your family.&lt;/p&gt;&lt;p&gt;(oh, this post made it to reddit? That would explain the these low quality comments. Although I see on reddit someone says "Typed nils are one of the worst design outcomes in the language". I suggest you go argue with them there, instead)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sun, 24 Aug 2025 12:52:23 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6756894741</link><description>&lt;p&gt;I hear C# is like java but better. Considering that I've hated every minute I've spent in Java, I'm sceptical.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sun, 24 Aug 2025 02:59:30 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6756736144</link><description>&lt;blockquote&gt;but most of this seems like petty bitchin&lt;/blockquote&gt;&lt;p&gt;You don't have to read my blog if it triggers you.&lt;/p&gt;&lt;p&gt;But sure, it may sound like petty bitchin. But these small things add up to a bad language. It's not easy to describe why a language is bad on a high level. Like people can throw PL theory words at it, but theory is just theory. Or you can mention these "petty" examples. But also that can be discarded with "well just don't do that, then", or "everyone knows to not do that".&lt;/p&gt;&lt;p&gt;Which just raises the question of if PL theory isn't an argument, and examples isn't an argument, is there even such a thing as a bad programming language?&lt;/p&gt;&lt;p&gt;And why would people who believe there's no such thing as a bad programming language even read a blog post about a programming language being bad?&lt;/p&gt;&lt;p&gt;Amazon apparently wrote its first version by translating XML to HTML using XSLT. Is XSLT a good programming language? Can't argue with results. AMZN is doing great!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sat, 23 Aug 2025 16:12:47 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6756733460</link><description>&lt;p&gt;With a username like that I don't expect you to agree with me, hehe. And that's fine.&lt;/p&gt;&lt;p&gt;I disagree that Rust's solution complicates things. In fact, I think that Go's choice of not having arrays be first class citizens (by that I mean that it's very rare for Go code to work with arrays directly, instead it's all just subtext when dealing with slices) complicates things much more.&lt;/p&gt;&lt;p&gt;Rust puts the truth right there, whereas Go has a steep learning curve for new people specifically with regards to slices because arrays are core to them, and yet they're rarely mentioned. They become new people's spooky action at a distance.&lt;/p&gt;&lt;p&gt;Once you learn it, you know it. But so it goes for everything.&lt;/p&gt;&lt;p&gt;"Programmer problem" is another word for "sounds like a skill issue"? Sure. But I disagree that "just never make a mistake" is a viable strategy in a large codebase with a varied set of skilled people. Which is Go's audience.&lt;/p&gt;&lt;p&gt;Go has no excuse for creating these footguns. C++ does. (age, mostly)&lt;/p&gt;&lt;p&gt;Sounds like you don't consider the things I list as problems, because "just don't do that, then". I enjoy coding C++, it has many things one could also say "just don't do that, then" (like non-virtual destructors on class hierarchies, delete on a new[]'d array, or raw new/delete in most places at all).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sat, 23 Aug 2025 16:06:23 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6756728850</link><description>&lt;p&gt;Don't take language disagreements personally, and lash out. I think my critique makes it clear I know exactly what interfaces, yes. Deleting your comment.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sat, 23 Aug 2025 15:54:57 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6756493127</link><description>&lt;p&gt;Did you comment twice, or copy paste the other comment?&lt;/p&gt;&lt;p&gt;See other reply for which language I prefer.&lt;/p&gt;&lt;p&gt;I don't know why people (this comment and ones on hacker news) seem to think that one can only critique and criticize if one is miserable. I can write my own opinions on my blog, and be happy at the same time.&lt;/p&gt;&lt;p&gt;It seems a bit ad hominem and weird.&lt;/p&gt;&lt;p&gt;You don't have to stop using Go. You're free to even like it. But I'm not wrong.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sat, 23 Aug 2025 04:52:41 -0000</pubDate></item><item><title>Re: Go is still not good</title><link>https://blog.habets.se/2025/07/Go-is-still-not-good.html#comment-6756492014</link><description>&lt;p&gt;Rust. I have a draft about where it feel it's shortcomings are, but they are miniscule compared to Go.&lt;/p&gt;&lt;p&gt;And Rust's problems are fixable. Go's are inherent, from its very core.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sat, 23 Aug 2025 04:46:44 -0000</pubDate></item><item><title>Re: Go programs are not portable</title><link>https://blog.habets.se/2022/02/Go-programs-are-not-portable.html#comment-6756221974</link><description>&lt;p&gt;One problem though is that &lt;code&gt;select()&lt;/code&gt; is affected by this, and you can't really subprocess that.&lt;/p&gt;&lt;p&gt;So if one had any illusions of Go being a systems language, that kills it.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Fri, 22 Aug 2025 13:40:50 -0000</pubDate></item><item><title>Re: Go programs are not portable</title><link>https://blog.habets.se/2022/02/Go-programs-are-not-portable.html#comment-6756209881</link><description>&lt;p&gt;It's true. The cross compiling story is pretty good.&lt;/p&gt;&lt;p&gt;But this article is about writing the code to be compilable for the platform in the first place, so it's a separate issue that still needs to be solved, or cross compiling won't work.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Fri, 22 Aug 2025 13:16:22 -0000</pubDate></item><item><title>Re: Exploring RISC-V vector instructions</title><link>https://blog.habets.se/2025/03/RISC-V-vector-instructions.html#comment-6680696310</link><description>&lt;p&gt;It seems pretty undocumented. Maybe easier to find for someone who can read Chinese.&lt;/p&gt;&lt;p&gt;But I think lscpu gives you the info you want:&lt;/p&gt;&lt;p&gt;```&lt;br&gt;&lt;code&gt;$ cat /proc/cpuinfo&lt;br&gt;processor	: 0&lt;br&gt;hart		: 0&lt;br&gt;model name	: Ky(R) X1&lt;br&gt;isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt&lt;br&gt;mmu		: sv39&lt;br&gt;uarch		: ky,x60&lt;br&gt;mvendorid	: 0x710&lt;br&gt;marchid		: 0x8000000058000001&lt;br&gt;mimpid		: 0x1000000049772200&lt;br&gt;[... other cores ...]&lt;br&gt;$ lscpu&lt;br&gt;Architecture:          riscv64&lt;br&gt;  Byte Order:          Little Endian&lt;br&gt;CPU(s):                8&lt;br&gt;  On-line CPU(s) list: 0-7&lt;br&gt;Model name:            Ky(R) X1&lt;br&gt;  Thread(s) per core:  1&lt;br&gt;  Core(s) per socket:  8&lt;br&gt;  Socket(s):           1&lt;br&gt;  CPU(s) scaling MHz:  100%&lt;br&gt;  CPU max MHz:         1600.0000&lt;br&gt;  CPU min MHz:         614.4000&lt;br&gt;Caches (sum of all):   &lt;br&gt;  L1d:                 256 KiB (8 instances)&lt;br&gt;  L1i:                 256 KiB (8 instances)&lt;br&gt;  L2:                  1 MiB (2 instances)&lt;br&gt;$ lscpu -C&lt;br&gt;NAME ONE-SIZE ALL-SIZE WAYS TYPE        LEVEL SETS PHY-LINE COHERENCY-SIZE&lt;br&gt;L1d       32K     256K    4 Data            1  128                      64&lt;br&gt;L1i       32K     256K    4 Instruction     1  128                      64&lt;br&gt;L2       512K       1M   16 Unified         2  512                      64&lt;br&gt;$ lscpu -e&lt;br&gt;CPU SOCKET CORE L1d:L1i:L2 ONLINE    MAXMHZ   MINMHZ       MHZ&lt;br&gt;  0      0    0 0:0:0         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  1      0    1 1:1:0         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  2      0    2 2:2:0         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  3      0    3 3:3:0         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  4      0    4 4:4:1         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  5      0    5 5:5:1         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  6      0    6 6:6:1         yes 1600.0000 614.4000 1600.0000&lt;br&gt;  7      0    7 7:7:1         yes 1600.0000 614.4000 1600.0000&lt;/code&gt;&lt;br&gt;```&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Tue, 01 Apr 2025 18:50:07 -0000</pubDate></item><item><title>Re: VisionFive 2 quickstart</title><link>https://blog.habets.se/2023/01/VisionFive-2-quickstart.html#comment-6587474279</link><description>&lt;p&gt;What's GNAT? And you mean ADA the language? I don't see why not.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Thu, 07 Nov 2024 05:47:10 -0000</pubDate></item><item><title>Re: AX.25 over D-Star</title><link>https://blog.habets.se/2022/02/AX.25-over-DStar.html#comment-6565192596</link><description>&lt;p&gt;The idea seems interesting, at least. But if we make something incompatible I'd say we can do better. VARA FM proves how fast it &lt;i&gt;can&lt;/i&gt; go, even over audio modulated FM. But it's closed source, so I'm waiting for something better.&lt;/p&gt;&lt;p&gt;Well, I say waiting, but am trying to build something better, but likely something like NinoTNC will be the standard winner in not too long. I hear it's managed to do 19.2kbps over an audio channel, at least in testing. VARA FM maxes out (according to the manual) at 25kbps.&lt;/p&gt;&lt;p&gt;In other words, I don't think D-Star is the future of amateur packet radio / AX.25.&lt;/p&gt;&lt;p&gt;We'll see about 1.2GHz, but I fear long term we'll lose 1.2GHz to GNSS. :-(&lt;br&gt;(but sure, there's also 2.3GHz, 2.4GHz, and up)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Sun, 06 Oct 2024 16:52:10 -0000</pubDate></item><item><title>Re: Dropping privileges</title><link>https://blog.habets.se/2022/03/Dropping-privileges.html#comment-6299428548</link><description>&lt;p&gt;As I mentioned, "root" is mostly just a set of capabilities. You can grant the right to bind to a privileged port without giving full root. E.g. see &lt;a href="https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-on-linux" rel="nofollow noopener" target="_blank" title="https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-on-linux"&gt;https://stackoverflow.com/q...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Another option is to bind to a higher port, and then use DNAT to redirect incoming packets to the unprivileged port.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Fri, 13 Oct 2023 06:30:47 -0000</pubDate></item><item><title>Re: No way to parse integers in C</title><link>https://blog.habets.se/2022/10/No-way-to-parse-integers-in-C.html#comment-6227856679</link><description>&lt;p&gt;Yeah. But this is writing half the integer parser myself.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Mon, 10 Jul 2023 11:29:37 -0000</pubDate></item><item><title>Re: Decoding FSK</title><link>https://blog-dev.habets.se/2017/04/Decoding-FSK.html#comment-6222431556</link><description>&lt;p&gt;Happy to help!&lt;/p&gt;&lt;p&gt;I appreciate the feedback!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Mon, 03 Jul 2023 06:56:28 -0000</pubDate></item><item><title>Re: RISC-V optimization and -mtune</title><link>https://blog.habets.se/2023/04/RISC-V-optimization-and-mtune.html#comment-6164578716</link><description>&lt;p&gt;1. Thanks! Fixed&lt;/p&gt;&lt;p&gt;2. It seems like a safe default for any architecture is to avoid adjacent write-read stalls though, due to latency, right? In the case of the U74 it's in-order, so no "magic". Maybe you're saying that the optimizer by default assumes OoO?&lt;/p&gt;&lt;p&gt;(this comment thread is also on &lt;a href="https://www.reddit.com/r/RISCV/comments/12qj3c5/riscv_optimization_and_mtune/)" rel="nofollow noopener" target="_blank" title="https://www.reddit.com/r/RISCV/comments/12qj3c5/riscv_optimization_and_mtune/)"&gt;https://www.reddit.com/r/RI...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Habets</dc:creator><pubDate>Tue, 18 Apr 2023 09:21:06 -0000</pubDate></item></channel></rss>