16 votes

What programming/technical projects have you been working on?

This is a recurring post to discuss programming or other technical projects that we've been working on. Tell us about one of your recent projects, either at work or personal projects. What's interesting about it? Are you having trouble with anything?

11 comments

  1. twisterghost
    Link
    It's not ready for prime time yet, but I reached functional viability for a project I'm calling prose, which is a CLI for managing all varieties of written word entries. The general idea is that...

    It's not ready for prime time yet, but I reached functional viability for a project I'm calling prose, which is a CLI for managing all varieties of written word entries.

    The general idea is that instead of having your posts and whatnot exist on blogging platforms, social media platforms or wherever else you write, you write stuff locally and import it into a single "prosefile", which stores the optional title, contents, author, timestamp and metadata of an entry or post. This data is all stored in a well defined format, and can be emitted to stdout with a command, prose send, such that you can pipe your prosefile contents into other programs which can modify the contents or render the contents or send the contents to an API or whatever.

    So maybe you like to write blog entries, and you post to write.as but you also want to have the flexibility to do something else with your content, like render preview snippets for other platforms, or render to pdf for local keepsakes. You write your post in a simple file, import it to your prosefile with prose add, then run it through a few commands (these are all made up right now of course):

    prose send | format-for-blog | writeas-submit && prose send | create-pdfs

    Another example is doing simple personal logging. There's a command, prose jot ... which just adds quick notes to your configured prosefile location. You could use it to track snippets during work, then make a simple parser program to extract prosefile entries from a given time range to pull up your snippets:

    prose jot "Did some stuff"
    prose jot "Did some more stuff"
    prose send | fetch-snippets day
    prose send | fetch-snippets week
    prose send | fetch-snippets quarter
    

    Anyway it's been fun to build and although it may seem niche, I think there's a lot of good use for it. The inspiration came from feeling weird about having my canonical location for stuff I write be on various platforms rather than some local location. And I could just write stuff to markdown files and save them to a folder, but the prospect of a single file with an easy-to-understand structure and metadata associated with posts makes for a flexible approach to manipulating the sources on the fly. Its like having an extensible compiler system and AST for written entries. (I hate that analogy but its kinda true).

    14 votes
  2. [2]
    hamstergeddon
    Link
    Maybe this isn't the right thread for this, but I need to vent some dev-related frustrations I'm having. We had a huge shift at work a few weeks ago that put much of the dev team on a single...

    Maybe this isn't the right thread for this, but I need to vent some dev-related frustrations I'm having.

    We had a huge shift at work a few weeks ago that put much of the dev team on a single internal project. Up to this point I've been a PHP developer that dipped his toes into some devops works and a single Vue project. But this new project is everything but that. Backend is node, a bunch of AWS services, and frontend is React. There's just so much that I don't know that needs to be learned and I'm finding it to be really overwhelming. I'm grateful for the opportunity to expand my skillset, but I'm struggling. And when I struggle, my anxiety turns it into a battle with Imposter Syndrome. And sometimes it's paralyzing. I'll just get STUCK and so overwhelmed by the anxiety and fear that i'm a shit developer that I literally can't get anything done. And then it feels like all of the other devs (who, in my defense, have strong backgrounds in some of this) are just plowing through these issues that are taking me days to figure out.

    I don't really know what to do. Part of me wants to reach out to our department head (who I know to be a very kind and helpful person) and just express how I'm feeling. But I'm kind of afraid to. What if I really am just shit my job and they kick me to the curb? And what can he really do anyway? I don't want to be coddled or anything, I'm just at my wit's end :(

    7 votes
    1. skybrian
      Link Parent
      Do you think anyone is up for pair programming? It's probably the fastest way to learn. Short of that, asking questions when you're stuck is important, so see if you can work out a way to do that...

      Do you think anyone is up for pair programming? It's probably the fastest way to learn.

      Short of that, asking questions when you're stuck is important, so see if you can work out a way to do that comfortably. Spending a lot of time struggling on your own isn't something anyone wants in a healthy organization. They're investing in you and that's an inefficient way to learn.

      6 votes
  3. [2]
    admicos
    Link
    I am working on my Gemini client called Moonlander. The difference from other graphical Gemini clients I know of is that I am the only person dumb enough to try to render directly into a canvas...

    I am working on my Gemini client called Moonlander. The difference from other graphical Gemini clients I know of is that I am the only person dumb enough to try to render directly into a canvas instead of using regular text widgets from the UI library (GTK in my case).

    The current big problem I have is text selection, as I currently don't have a way to "figure out" which character of a specific line is at a specified coordinate, as I don't do the text layout or rendering myself, but defer to Pango to do the job for me.

    And also, the text selection problems demonstrated at Text Rendering Hates You just worry me even more.

    The easiest solution I can think of would be to only allow selection of complete lines, but I'm not entirely sure how useful that'll be.

    The other known problems or missing features can be fixed relatively easily, but this is my biggest issue right now.

    7 votes
    1. Wulfsta
      Link Parent
      I'm excited to see all this work being done on Gemini, hopefully it continues to increase in popularity.

      I'm excited to see all this work being done on Gemini, hopefully it continues to increase in popularity.

      3 votes
  4. [4]
    Wulfsta
    Link
    I've been trying to package TensorFlow with a ROCm backend for NixOS. It's not going well. TensorFlow uses Bazel as a build system, which is horrible for all sorts of reasons, but even more so...

    I've been trying to package TensorFlow with a ROCm backend for NixOS. It's not going well. TensorFlow uses Bazel as a build system, which is horrible for all sorts of reasons, but even more so when combined with NixOS. Lots of paths in the build files are hardcoded and expect to find things at /opt/rocm, which is never true for NixOS. This expectation is probably why the Bazel build files for ROCm don't follow any symlinks, which compounds how difficult it is to package this.

    6 votes
    1. [3]
      skybrian
      Link Parent
      Is there a Tensor flow community that might help?

      Is there a Tensor flow community that might help?

      3 votes
      1. [2]
        Wulfsta
        Link Parent
        Well, sort of. ROCm is not an official target for TensorFlow, and neither is NixOS. This is a niche enough problem that I suspect there would be very little interest in providing support....

        Well, sort of. ROCm is not an official target for TensorFlow, and neither is NixOS. This is a niche enough problem that I suspect there would be very little interest in providing support. Fortunately the maintainer of the nixos-rocm overlay is both very competent and willing to provide help, so I've mostly been pinging him with questions.

        4 votes
        1. skybrian
          Link Parent
          I haven't used Bazel outside Google but typically, C++ binaries are built statically from dependencies that are also checked into the source tree (a monorepo) and also built by Bazel, and runtime...

          I haven't used Bazel outside Google but typically, C++ binaries are built statically from dependencies that are also checked into the source tree (a monorepo) and also built by Bazel, and runtime parameters are passed in at startup via flags. Hard-coding the location of /opt/rocm sounds like some kind of workaround to me since typically you wouldn't want the build to depend on anything on the developer's workstation.

          2 votes
  5. Bauke
    Link
    I published my first crate on crates.io! :3 For another project I'm (slowly) working on I want to add support for importing feeds via OPML and since there was no OPML parser crate yet, I made one....

    I published my first crate on crates.io! :3 For another project I'm (slowly) working on I want to add support for importing feeds via OPML and since there was no OPML parser crate yet, I made one. Now normally, I don't really like touching XML parsing because my experience with it has always been awful, but this time it turned out to be really easy.

    With the strong_xml crate it just makes you define a struct that describes the XML, then you add some macros and bam it's done. For example, the OPML spec says:

    <opml> is an XML element, with a single required attribute, version; a <head> element and a <body> element, both of which are required.

    So, let's make a struct with exactly that:

    pub struct OPML {
      pub version: String,
      pub head: Head,
      pub body: Body,
    }
    

    Then we just sprinkle some macros on top:

    #[derive(XmlWrite, XmlRead, PartialEq, Debug)]
    #[xml(tag = "opml")]
    pub struct OPML {
      #[xml(attr = "version")]
      pub version: String,
      #[xml(child = "head")]
      pub head: Head,
      #[xml(child = "body")]
      pub body: Body,
    }
    

    And done. Now we can just call OPML::from_str(r#"<opml version="2.0"><head/><body/></opml>"#); and it will parse. And if we leave out the version attribute, the head or the body, strong_xml will error out telling us it's missing required things. Amazing!

    3 votes
  6. spctrvl
    Link
    More a hardware project, but I'm working on building a router out of some old desktop hardware. Ran into a bit of a hitch today, the 4-port NIC I got off ebay seems to be incompatible with my...

    More a hardware project, but I'm working on building a router out of some old desktop hardware. Ran into a bit of a hitch today, the 4-port NIC I got off ebay seems to be incompatible with my motherboard, as the computer won't boot with it in. It's an HP 331FLR, and although the spec sheet claims it's compatible with PCIe, and it physically fits in the slot, further research seems to indicate it's actually intended for a particular interface unique to HP servers. So yeah, didn't do enough research before I got it, but I didn't even know that was a possibility. Oh well, at least I'm not out much money for it.

    I'm looking for a replacement card, but google is just dreadfully bad at turning up useful information on this stuff. I actually did better using the reddit search on the pfsense sub. Currently looking at an IBM-branded Intel I340-T4 for about $25 on ebay, but I'd love some input if anyone else here's done something like this before.

    2 votes