<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: tibordp</title><link>https://news.ycombinator.com/user?id=tibordp</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 15 Apr 2026 04:35:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tibordp" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tibordp in "A4 Paper Stories"]]></title><description><![CDATA[
<p>Given that we are talking about A4 papers and grams, I'd bet this wasn't in the US.<p>In Europe, the typical flat rate is up to 100g for standard letters. And that's 20 sheets, which is not a particularly unusual letter to send.</p>
]]></description><pubDate>Wed, 07 Jan 2026 14:34:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=46526788</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=46526788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46526788</guid></item><item><title><![CDATA[New comment by tibordp in "Bypassing disk encryption on systems with automatic TPM2 unlock"]]></title><description><![CDATA[
<p>That's only true for information theoretically secure algorithms like one-time pad. It's not true for algorithms that are more practical to use like AES.</p>
]]></description><pubDate>Fri, 17 Jan 2025 15:06:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=42738267</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=42738267</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42738267</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: HTML for People"]]></title><description><![CDATA[
<p>Similar - I learned HTML by tweaking ReadMe.htm that was included with Dweep videogame from (now defunct) Dexterity Software.</p>
]]></description><pubDate>Fri, 11 Oct 2024 18:11:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=41811796</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=41811796</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41811796</guid></item><item><title><![CDATA[New comment by tibordp in "Arpchat – Text your friends on the same network using just ARP"]]></title><description><![CDATA[
<p>Not sure I'd agree about it being esoteric. Understanding or at least knowing about ARP is still very much essential for people in networking. arping is a very useful tool for seeing if machines on the same network segment are up and just not responding to ICMP pings. Anyone looking at tcpdump/Wireshark dumps will run into it sooner or latter.<p>It is true that software engineers may sooner run into it when debugging their home network than their application though as cloud and traditional networks are very different.</p>
]]></description><pubDate>Wed, 09 Aug 2023 18:47:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=37066887</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=37066887</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37066887</guid></item><item><title><![CDATA[New comment by tibordp in "Ask HN: LLVM vs. C?"]]></title><description><![CDATA[
<p>You can go surprisingly far with C, though LLVM is probably a better long-term option for a serious compiler, because it's a tool made for the job (unless you target exotic and/or embedded platforms that don't have LLVM support - but that's fairly unlikely).<p>C is very easy to get started with if you don't already know LLVM. You don't have to flatten everything to SSA + basic blocks and can keep expressions as trees. The downside is that once your compiler is reasonably complete, you may spend quite a bit of time working around quirks of C (e.g. int promotion is very annoying when you already have full type information, so your compiler either has to understand C semantics fairly well or defensively cast every subexpression).<p>I have a C backend in my compiler (<a href="https://github.com/alumina-lang/alumina">https://github.com/alumina-lang/alumina</a>) and it works really well, though the generated C is really ugly and assembly-like. With #line directives, you can also get source-level debugging (gdb/lldb) that just works out of the box.<p>There are a few goodies that LLVM gives you that you don't get with C, like coverage (<a href="https://clang.llvm.org/docs/SourceBasedCodeCoverage.html" rel="nofollow noreferrer">https://clang.llvm.org/docs/SourceBasedCodeCoverage.html</a>). It works when done through clang, but cannot easily be made to track the original sources.</p>
]]></description><pubDate>Fri, 30 Jun 2023 22:50:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=36543591</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=36543591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36543591</guid></item><item><title><![CDATA[New comment by tibordp in "How VSCode made bracket pair colorization faster (2021)"]]></title><description><![CDATA[
<p>Just the standard Remote-SSH<p><a href="https://code.visualstudio.com/docs/remote/ssh" rel="nofollow noreferrer">https://code.visualstudio.com/docs/remote/ssh</a></p>
]]></description><pubDate>Thu, 22 Jun 2023 16:10:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=36434372</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=36434372</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36434372</guid></item><item><title><![CDATA[New comment by tibordp in "How VSCode made bracket pair colorization faster (2021)"]]></title><description><![CDATA[
<p>That's interesting, I don't find VSCode slow at all, even when working on large workspaces via SSH over a high latency link.<p>Sure, there are native editors that are snappier, but not to the point that affect my productivity in any way.<p>The one thing that VSCode does not handle well is large files (e.g. DB dumps, large JSONs, logfiles), but for coding, it really is not an issue.</p>
]]></description><pubDate>Thu, 22 Jun 2023 15:52:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=36434089</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=36434089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36434089</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>It's not that it's hard, it's just that it is not inline, so it requires a context switch because the CM is defined outside, even when it's doing something specific.<p>The most common problem that defer is trying to solve is cleanup when the function returns early (ususally because of an error). Writing the cleanup code inline before the early return results in code duplication.<p>C#/Java/Javascript have try/finally for this, C has the "goto cleanup" idiom, and C++ and Rust have the guard objects. Go and Alumina have defer.</p>
]]></description><pubDate>Sat, 03 Sep 2022 21:50:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=32706465</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32706465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32706465</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>That's a good point and also one of the things I kinda like about Alumina. You can do thing like this and the file will only be closed at the end of the function rather than the end of the if block.<p><pre><code>    let stream: &dyn Writable<Self> = if output_filename.is_some() {
        let file = File::create(output_filename.unwrap())?
        defer file.close();

        file
    } else {
        &StdioStream::stdout()
    };</code></pre></p>
]]></description><pubDate>Sat, 03 Sep 2022 21:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=32706264</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32706264</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32706264</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>I wouldn't say it was very difficult, but it did take quite a bit of time. Apart from some basic principles (no GC, no RAII, "everything is an expression"), I basically kept adding features whenever I hit some pain point trying to write actual programs in Alumina. If I were to do it again, I'd probably be more methodical, but anyway, here we are :)<p>Protocols were probably the trickiest feature of the language to figure out. As for the compiler itself, surprisingly, the biggest hurdle to get over was the name resolution. It's a tiny part of the compiler today, but everything else was much more straightforward.<p>I don't have formal CS background, but I have been coding for a long time. I read the Dragon Book and would recommend it to anyone writing a compiler, even though it's a bit dated.<p>I don't know Racket or LISP myself so I cannot comment on that part.</p>
]]></description><pubDate>Sat, 03 Sep 2022 21:13:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=32706136</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32706136</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32706136</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>No native compilation to WASM yet, but since the compiler outputs self-contained C, it should be fairly easy to do it with Emscripten.<p>The sandbox is running the code server-side in a nsjail container.<p>As for unwrap, I feel you! the try expression (expr?) is supported, which makes it look a bit nicer, but I'm still trying to figure out a good idiom for when you actually want to do specific things based on whether the result is ok or err.<p>Alumina does not have Rust-style enums (tagged unions) or the match construct, which makes it a bit tricky.</p>
]]></description><pubDate>Sat, 03 Sep 2022 20:59:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=32706028</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32706028</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32706028</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>Python context managers are actually very similar to guard objects in C++ and Rust.<p>What I meant was something like this (could also be done with `contextlib`, but it's also verbose)<p><pre><code>    seen_names = {}

    class EnsureUnique:
        def __init__(self, name: str):
            self.name = name
        
        def __enter__(self):
            if self.name in seen_names:
                raise ValueError(f"Duplicate name: {self.name}")
            seen_names.add(self.name)

        def __exit__(self, exc_type, exc_value, traceback):
            seen_names.remove(self.name)


    def bar():
        with EnsureUnique("foo"):
            do_something()
            ...
</code></pre>
With defer this could be simplified to<p><pre><code>    static seen_names: HashSet<&[u8]> = HashSet::new();

    fn bar() {
        if !seen_names.insert("foo") {
            panic!("Duplicate name: foo")
        }
        defer seen_names.remove("foo");

        do_something();
    }</code></pre></p>
]]></description><pubDate>Sat, 03 Sep 2022 20:08:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=32705586</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32705586</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32705586</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>Scoped destruction is awesome in general, and I agree that it is superior to defer.<p>I think one case where defer might be nicer is for things that are not strictly memory, e.g. inserting some element into a container and removing it after the function finishes (or setting a flag and restoring it).<p>This can be done with a guard object in RAII languages, but it's a bit unintuitive. Defer makes it very clear what is going on.</p>
]]></description><pubDate>Sat, 03 Sep 2022 19:08:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=32705021</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32705021</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32705021</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>Honestly, Tree Sitter is fantastic, I can highly recommend it. By far the most user friendly and powerful parser generator I've worked with. The C API is very nice.<p>The only two pain point I had is that the `node-types.json` that's generated only contains the names of the nodes, not the numerical IDs. This means that if you have some codegen generating Rust enums is difficult if you want to avoid matching nodes by string.<p>I wrote <a href="https://github.com/tibordp/tree-sitter-visitor" rel="nofollow">https://github.com/tibordp/tree-sitter-visitor</a> for generating visitor traits in Rust for a given grammar. I actually did it a bit differently in the end for Alumina, but it might come useful.</p>
]]></description><pubDate>Sat, 03 Sep 2022 18:59:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=32704944</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32704944</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32704944</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>Valgrind and Sanitizers should work on Alumina. I have not actually tried them myself yet, but I don't see any reason why they couldn't work.<p>The only potential problem I see that with the current C backend, the debugging information is very hard to trace back to the original Alumina source code, so it might be hard to see where the leaks are coming from. This is something I plan to address in the self-hosted compiler, once it is functional.</p>
]]></description><pubDate>Sat, 03 Sep 2022 18:24:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=32704633</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32704633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32704633</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>As far as I know it doesn't have a single feature that is really unique. It's more like a combination of things I like from other languages, like syntax and expressions from Rust, defer expressions from Go, UFCS from D.<p>The overarching theme is to see how far you can go making a language that feels high level without having a garbage collector or RAII. I used to use Deplhi/Pascal a lot when I was younger and it was this kind of language.</p>
]]></description><pubDate>Sat, 03 Sep 2022 18:20:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=32704585</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32704585</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32704585</guid></item><item><title><![CDATA[New comment by tibordp in "Show HN: Alumina Programming Language"]]></title><description><![CDATA[
<p>Totally agreed about FFI. I wanted to make it easy to interop with C code and write expressive bindings.<p>Check for example the language bindings to LLVM's C API (fairly low level) and Tree-Sitter which is used internally (a bit higher level bindings)<p><a href="https://github.com/tibordp/alumina/tree/master/libraries/llvm" rel="nofollow">https://github.com/tibordp/alumina/tree/master/libraries/llv...</a><p><a href="https://github.com/tibordp/alumina/blob/master/libraries/tree_sitter.alu" rel="nofollow">https://github.com/tibordp/alumina/blob/master/libraries/tre...</a><p>I think UFCS makes it quite nice for bindings, since external C functions can be used as if they were methods if the object is passed as the first parameter. So in many cases there might not even be a need to write wrapper structs for bindings that feel native.<p>Of course, it's still a manual process and since Alumina is just a compiler and stdlib for now (no llibrary ecosystem, no compiler driver), it's a bit cumbersome. But I like the approach Rust has with bindgen and cc crates, to automatically create bindings for C and C++ code.</p>
]]></description><pubDate>Sat, 03 Sep 2022 17:20:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=32703988</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32703988</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32703988</guid></item><item><title><![CDATA[Show HN: Alumina Programming Language]]></title><description><![CDATA[
<p>Alumina is a programming language I have been working on for a while. Alumina may be for you if you like the control that C gives you but miss goodies from higher level programming languages.<p>It is mostly for fun and exercise in language design, I don't have any grand aspirations for it. It is however, by this time, a usable general-purpose language.<p>Alumina borrows (zing) heavily from Rust, except for its raison d'être (memory safety). Syntax is a blatant rip-off of Rust, but so is the standard library scope and structure.<p>Alumina bootstrap compiler currently compiles to ugly C, but a self-hosted compiler is early stages that will target LLVM as backend.<p>If that sounds interesting, give it a try. I appreciate any feedback!<p>Standard library documentation:
<a href="https://docs.alumina-lang.net/" rel="nofollow">https://docs.alumina-lang.net/</a><p>Online compiler playground:
<a href="https://play.alumina-lang.net/" rel="nofollow">https://play.alumina-lang.net/</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32702812">https://news.ycombinator.com/item?id=32702812</a></p>
<p>Points: 107</p>
<p># Comments: 87</p>
]]></description><pubDate>Sat, 03 Sep 2022 15:32:21 +0000</pubDate><link>https://github.com/tibordp/alumina</link><dc:creator>tibordp</dc:creator><comments>https://news.ycombinator.com/item?id=32702812</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32702812</guid></item></channel></rss>