• 2 Posts
  • 349 Comments
Joined 1 year ago
cake
Cake day: June 12th, 2023

help-circle

  • The personal project I’m currently working on the most is Nucom, an implementation of Microsoft’s Component Object Model.

    The IDL compiler for it, which takes .idl files which define COM interfaces and outputs C/C++ headers/source files and Rust modules, is written in Rust.

    Originally, this project was all C++, and everything but the compiler still is (which also likely isn’t going to change since it involves building dynamic libraries which Rust does not do well at all), but I really did not want to go without Rust when writing a parser/compiler type thing because the language is so much nicer to work with.



  • The bingo one actually uses crossbeam channels instead of mutexes, so that’s nice. I haven’t looked too closely at it though.

    I don’t think you can do too much about the Spectrum one if you want to keep the two threads, but here’s what I would change related to thread synchronization. Lemmy doesn’t seem to allow me to attach patch files for whatever reason so have an archive instead… https://dblsaiko.net/pub/tmp/patches.tar.bz2 (I wrote a few notes in the commit messages)

    Just to give the reason for Rc<RefCell> in the current project. I’m reading in a M3U file and I’m going to be referencing it against an Excel file. So in the structure for the m3u file, I have two BtreeMaps, one for order by channel number and one by name. Each containing references to the same Channel object.

    So basically it’s channels indexed by channel number and name? That one is actually one of the easy cases. Store indices instead:

    struct Channels {
      data: Vec<Channel>,
      by_number: BTreeMap<u32 /* or whatever */, usize>,
      by_name: BTreeMap<String, usize>,
    }
    
    // untested but I think it should compile
    fn get_channel_by_name(ch: &Channels, name: &str) -> Option<&Channel> {
      Some(&self.data[*ch.by_name.get(name)?])
    }
    





  • This is a great project. The way it handles mixing markup and code is on point. Also, for drawing its CeTZ is so much nicer than TiKZ, the LaTeX equivalent. I made some great graphics with it for a seminar presentation and paper that I couldn’t have done anywhere near as easily with LaTeX. (The presentation slides I made entirely with Typst, the paper had a LaTeX template that I didn’t feel like remaking because it was huge so I just embedded the graphics I made with Typst)







  • Seems fine to me except for all the firewall and special routing stuff, I’m not familiar with that. Does the wg command show received or only sent data? For the record, this is my config:

    spoiler
    # /etc/systemd/network/mullvad.netdev
    [NetDev]
    Description=Mullvad
    Kind=wireguard
    Name=mullvad
    
    [WireGuard]
    PrivateKeyFile=/var/keys/mullvad/pk
    
    [WireGuardPeer]
    AllowedIPs=::/0
    AllowedIPs=0.0.0.0/0
    Endpoint=146.70.126.194:51820
    PublicKey=ApOUMLFcpTpj/sDAMub0SvASFdsSWtsy+vvw/nWvEmY=
    
    # /etc/systemd/network/mullvad.network
    [Match]
    Name=mullvad
    
    [Network]
    Address=10.64.130.96/32
    Address=fc00:bbbb:bbbb:bb01::1:825f/128
    
    [Route]
    Destination=::/0
    Metric=16384
    
    [Route]
    Destination=0.0.0.0/0
    Metric=16384