1. 14

What are you doing this week? Feel free to share!

Keep in mind it’s OK to do nothing at all, too.

    1. 11

      pa’i now has full API compatibility with the API I made for Olin! I’m working on a blogpost where I explain the performance improvements by using cranelift (via wasmer) over the interpreter I used in Go. Here’s a sneak preview of a synthetic as heck benchmark:

      $ hyperfine --warmup 3 --prepare './result/bin/pahi result/wasm/cpustrain.wasm' \
            './result/bin/cwa result/wasm/cpustrain.wasm' \
            './result/bin/pahi --no-cache result/wasm/cpustrain.wasm' \
            './result/bin/pahi result/wasm/cpustrain.wasm'
      Benchmark #1: ./result/bin/cwa result/wasm/cpustrain.wasm
        Time (mean ± σ):      1.680 s ±  0.007 s    [User: 1.692 s, System: 0.013 s]
        Range (min … max):    1.671 s …  1.691 s    10 runs
      
      Benchmark #2: ./result/bin/pahi --no-cache result/wasm/cpustrain.wasm
        Time (mean ± σ):      55.6 ms ±   3.0 ms    [User: 161.9 ms, System: 17.1 ms]
        Range (min … max):    50.4 ms …  62.2 ms    37 runs
      
      Benchmark #3: ./result/bin/pahi result/wasm/cpustrain.wasm
        Time (mean ± σ):      22.9 ms ±   1.6 ms    [User: 17.5 ms, System: 5.4 ms]
        Range (min … max):    19.2 ms …  25.4 ms    63 runs
      
      Summary
        './result/bin/pahi result/wasm/cpustrain.wasm' ran
          2.43 ± 0.21 times faster than './result/bin/pahi --no-cache result/wasm/cpustrain.wasm'
         73.42 ± 5.11 times faster than './result/bin/cwa result/wasm/cpustrain.wasm'
      

      This compares three things:

      • the Olin interpreter named cwa
      • pa’i without compiled binary caching
      • pa’i using the cached compiled binary during the warmup run

      I am using hyperfine for benchmarking. If you don’t trust my numbers, I encourage you to download the docker image xena/pahi:latest and verify them for yourself. I’m testing this on my dedi in OVH with a 4-core Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz. This is surely faster on more modern hardware, but this is the machine I do development on.

      To run these benchmarks in docker, use this command:

      $ docker run --rm -it xena/pahi hyperfine --warmup 3 --prepare 'pahi /wasm/cpustrain.wasm' 'cwa /wasm/cpustrain.wasm' 'pahi --no-cache /wasm/cpustrain.wasm' 'pahi /wasm/cpustrain.wasm'
      

      When running this on my 2013 mac pro, I get this:

      $ docker run --rm -it xena/pahi hyperfine --warmup 3 --prepare 'pahi /wasm/cpustrain.wasm' 'cwa /wasm/cpustrain.wasm' 'pahi --no-cache /wasm/cpustrain.wasm' 'pahi /wasm/cpustrain.wasm'
      Benchmark #1: cwa /wasm/cpustrain.wasm
        Time (mean ± σ):      1.881 s ±  0.015 s    [User: 1.857 s, System: 0.031 s]
        Range (min … max):    1.863 s …  1.910 s    10 runs
      
      Benchmark #2: pahi --no-cache /wasm/cpustrain.wasm
        Time (mean ± σ):      80.1 ms ±   9.0 ms    [User: 162.2 ms, System: 29.2 ms]
        Range (min … max):    65.0 ms … 102.4 ms    26 runs
      
      Benchmark #3: pahi /wasm/cpustrain.wasm
        Time (mean ± σ):      22.1 ms ±   0.6 ms    [User: 16.7 ms, System: 5.0 ms]
        Range (min … max):    21.2 ms …  24.7 ms    62 runs
      
      Summary
        'pahi /wasm/cpustrain.wasm' ran
          3.63 ± 0.42 times faster than 'pahi --no-cache /wasm/cpustrain.wasm'
         85.28 ± 2.59 times faster than 'cwa /wasm/cpustrain.wasm'
      

      I plan to include a few more tests including:

      • synthetic fibonacci
      • encoding/decoding JSON
      • decoding some kubernetes objects from yaml

      If anyone has any other ideas for this, please let me know.

      1. 3

        Can I just say that you do some really cool stuff? You do some really cool stuff. And I actively read when you’re linked from Lobste.rs.

        1. 2

          You sure can! Working on this stuff helps keep my life interesting. I also enjoy writing about it! My blog is also stupidly useful when it comes to interviews for jobs.

    2. 8

      Work: Finishing up the core implementation of the new data model for our threat intelligence platform. It’s going to be so cool.

      Play: Writing another text editor. I know, I know…

      1. 9

        That’s the beautiful thing about hobby projects. You don’t have to justify it to anyone. You can do it just because you WANT to :)

        Reactions to my current passion project have ranged from “You do realize you’re effectively re-implementing NNTP, right?” to “Doesn’t <Name your favorite existing forum/social network software> do the same thing?”

      2. 2

        Funny timing - I’ve also been researching text editor internals lately for exactly the same reason. Do you know what direction you want to go with your editor?

        1. 2

          This’ll be my third or fourth after sam, tine, and an older one that I’ve since lost the source for that used a Lara/Oberon-style piece chain.

          (See “Concepts of the Text Editor Lara” by Gutknecht and chapter five of Project Oberon…)

          I’m thinking I want something decidedly “simpler” both in usage and implementation. Something that is both nice and friendly to use (“friendly” for someone used to pre-GUI text editors), but also simple enough code-wise that a person interested in writing a text editor could look at it and follow along. Maybe I’ll write a book one of these days…

          (The current design in my head follows BeOS’s StyledEdit’s keybindings, because why not?)

          Internals-wise it would most likely be a a simple array-of-gap-buffers or a piece chain. The piece chain is nice if I want to eventually add syntax highlighting because it can store styling information in a really nice way without requiring a separate data structure. Ropes are more trouble than they’re worth, IMHO.

    3. 5

      Since last time: I decided to start trying to replace the GUI in Tesseract with Nuklear. It went okay until it didn’t, and now something, somewhere is causing a GL_INVALID_OPERATION after the fourth frame. It might be to do with glEnable/glDisable pairs for states that the engine was expecting to always be enabled.

      This week I’ll either be tracking this issue down, which may involve wrapping every extension with an error checking macro*, or (more fun and therefore more likely) picking something with few dependencies to port to Zig. Perhaps the octree module, or something to do with shaders because they’re new and interesting to me. Either way I’m going to continue learning a lot!

      *Edit: I just found debug output so this is going to be a lot easier.

    4. 5

      Been through about 15 pages of A Tour of C++: The Basics. I plan to finish it. C++ is a bit strange. I had no idea there was such criticism about it from rather prominent people. Wonder what others think that write it daily?

      Otherwise, writing some Python and planning to deploy a simple web app on a Pi I have sitting around. I’ve really enjoyed playing with CSS grid for the front end layouts.

      Practicing handwriting code with pencil and paper.

      Reading The Stand…because, ya know, the Virus (Captain Trips) and all.

    5. 4

      Booked myself away in the company calendar until 13th for coding marathon.

      1. 2

        Nice, have you already figured out what you’ll work on?

        I just took last week off for the same thing, and it was fun to just spend a few days focused on a hobby project

        1. 1

          It’s for work, a push to get the new product feature-complete and stable enough for pre production testing. A distributed system written in Common Lisp running on our proprietary hardware.

          (the point with calendar was to avoid invitations into most meetings)

    6. 4

      Over the past couple months I’ve been exploring audio engineering, photography, and illustration. This week I’m going to start enforcing a better practice schedule by requiring output to be uploaded.

      Every x period I’m requiring I upload a photo, illustration, or audio file to my space on Digital Ocean. I’m going to connect that to an API so I can serve all of these files on some sort of portfolio. They’ll be “release” files, which will be shown by default. But, users exploring the portfolio will also be able to “show all”. I feel it will be neat to be able to see progress throughout x time period.

      1. 2

        When it’s up, please feel free to message me! Really curious to see this coming into fruition! I’ll add a reminder to add check back on your space in 2-3 months.

        I always struggle with motivation on hobby projects so I hope it will work for you.

    7. 3

      A plugin that I use as part of my static blog stopped working due to a Python 3 issue. I reported the issue, but looked like it may take time. So I thought to understand the issue first and rewrite it myself. I gotta learn what the plugin does, plugin’s architecture, replacement logic, and then testing it on my own blog and then may be publish. I am getting a head rush at every turn, but it is worth it.

    8. 2

      At work I’m implementing a no_std Rust crate full of types that are used to interact with AMD SEV. My goal is to provide all of the types with constructors to uphold any invariants required by the SEV API spec.

      At home I’m just starting to research affordable data storage solutions like DigitalOcean Spaces or Linode Object Storage. Ultimately I’d like to have a place where I can upload my photos and optionally share them kind of like Google Photos. Off the top of my head I’m thinking I’d use a cheap cloud VM to host something that knows how to talk the data buckets but I’ve never done anything like this before. In addition to hosting and sharing photos, I’d also like to store backups to it as well.

      If anyone has any suggestions for setting something like this up, please share :-)

      1. 1

        I use AWS Glacier but people I know say really good things about Backblaze C2 as well.

    9. 2

      Mainly having coder’s block, I expect. Will be heading back to work after a very nice four-day weekend of enjoying sun, sleeping a lot, and hanging out with a very cute 50 kg German Shepherd who prefers greeting people at high velocity.

    10. 2

      At work the project my team normally works on lost funding (temporarily) so we’ve been working a bunch of random “leftover” tasks. Right now I’m working on a STIG compliance task.

      Outside of work I’ve been polishing up my library for calling the Spotify API. The main feature is that it handles the OAuth authentication and token refresh, but it also exports get/post/put functions that do error checking and handle JSON deserialization and also some limited scope handling.

      It’s kind of silly in that I wrote it thinking, “It’d be cool to call Spotify from the Lisp REPL,” and never really had an application in mind. Now that it’s working I feel like I should write a small app around it - maybe a tool to explore related artists or something like that.

    11. 2

      Battling this flu that is currently still very much winning. Finding someone that is both skilled enough at PHP and JavaScript and willing to sit in my place and take over development and support for my WordPress plugins. The first part on its own is easy, but combining it with the latter makes it incredibly hard. Even though I’m willing to pay (really) well. It strengthens my resolve for getting out of this golden cage, because if others are “picky”, why not me?

    12. 2

      (3 weeks ago: https://lobste.rs/s/2qzmtr/what_are_you_doing_this_week#c_cijuow)

      $WORK: I’ve got a lot of stuff going on this week. I have a small presentation on containers and their history on Thursday which I have to throw together. In 3 weeks, I have my conference presentation, so I hope to start on that today and get it moving along so that I have enough time to practice and prepare. I also need to work on open sourcing the code that the conference paper/presentation is about, which I haven’t really started on yet.

      I think I’m going to need to punt on a project I’m excited about for now, so that I’ll have enough time to get everything else done. Because everything is happening all at once this month, I’m going to have to get really good about managing my time. I’ve started journaling via jrnl.sh to keep track of that time better and I’m hoping to do some nightly reviews of the journal to see where I’ve lost time. I tend to treat myself poorly during busy months, which I’d like to improve on by making sure to give myself time to decompress and relax. After last year’s busy March month, I needed several months just to decompress, during which I didn’t really do anything, and I’m trying not to let that happen again.

      $HOME: I’ve been playing with my 3D printer again. I finally have a copy of SolidWorks so I can start 3D modeling stuff. So far, I haven’t printed many useful things, but it’s been really nice to be able to do this again. There’s something really relaxing about taking measurements of things and recreating them in SolidWorks; it’s very systematic and the end result is always nice. Right now, I’m designing a little faux sink for my cat to play in so we don’t have to feel bad about wasting water (it’ll get reused and re-pumped through the system).

      I want to get my personal server in use again. I didn’t get into blogging again like I’d hoped, and I think that’s because I made the system a little too DIY. I’d like to throw in someone else’s server that supports MicroPub that way I can blog from my phone, instead of having to get out my laptop. At the end of the day, it probably still won’t get much use, but it’s still fun to play around with.

      I bought a laptop a week or two ago, a ThinkPad T420. I used to own one of those but ended up selling it to a friend, and I’ve been missing it. Unfortunately, the one I have doesn’t have all the nice specs the old one had (an i7, an SSD, maxed out RAM), but it works well enough once it gets going. It’s my main SolidWorks machine, from above. It also has a DVD drive, so I’m thinking about ripping some of the DVDs I own and setting up a plex server, perhaps on my gaming PC attached to the TV.

      Lastly, a good friend is leaving for Australia for a few weeks, so we’re hanging out tonight before he goes. We’ve been playing through the game Divinity, which has a map/campaign editor that we’re hoping to play with and maybe port some simple One-Off D&D campaigns to, which should be fun.

    13. 2

      Probably going to continue working on my ray tracer in Rust, following The Ray-Tracer Challenge.

      Researching tech conferences I can submit talks to, particularly Rust, Ruby, or Python ones. Recommendations appreciated!

      Attending the Winter Play Gaming Expo here in New York this weekend!

      Helping my girlfriend find a new tech job. She’s an infrastructure engineer. Open to referral opportunities.

    14. 2

      I’m working on a university project where I get to work on various topic regarding Emacs, Mail and Encryption. If anyone has any ideas or wishes related to the intersection of these topic, please tell me, and I hope to work on it!

    15. 2

      Strangely enough, researching text editors.

      I was originally thinking of writing my own toy text editor but when you start digging, there’s a ton you never think about. How do you store text buffers? How do you handle undo? How does syntax highlighting work? How do you even figure out how many characters you can display on a line?

      I’m hoping to write some of this up into an article at some point.

      1. 1

        I would love to read this article. Let me know if you need someone to proof-read.

    16. 2

      CommonMark parser for OCaml.

      I’m not in the “escape velocity” point, I might still abandon it, but I’m enjoying it so far, and think I’ll enjoy seeing it through. There’s omd, which is simple and stores the intermediate parse tree, but has major incompatibilities with CommonMark. There’s also cmark, but requires the C binary be installed on your computer (hurts portability), and I’d like to preserve the intermediate parse tree. The idea is to insert fun additions like “estimated reading time of article,” adding id attributes to p tags for href-ble paragraphs, or syntax highlighting on code blocks.

    17. 1

      Static photo album generator for images hosted on Flickr. Surprise gift for my wife’s upcoming birthday.

    18. 1

      2D C99 game engine. 4200 LOC now. I rewrote the renderer over the weekend to map vertex attribute inputs in shaders to semantic names and geometry now supports specifying vertex formats using these semantic names. I just debugged texture atlas generation for psf2 fonts, and am ready to write the draw calls for bitmapped fonts.

    19. 1

      Work: Dusting off my rusty Ruby neurons and really enjoying it. I don’t see Python not being my programming language of choice anytime soon but Ruby’s blocks are just so expressive and fun to write, and it has an honest to god case statement! :)

      Omission of a case statement is the ONE design choice in Python I Just Don’t Get. Sure, if/then/else trailing off into the middle distance do the job but a case and a slew of “when”s is SO much more readable IMO.

      Personal:

      Probably won’t have time for much personal coding this week. Been running Ubuntu 20.04 Focal Fossa on Yamato - my battleship laptop, and really enjoying it. For a pre-release it’s surprisingly solid, but I’m having fun reporting the bugs I find and engaging the community to help out in what small ways I can anyway.

      Also seeing some really anomalous seeming numbers running bench.sh under Ubuntu and Windows/WSL. The WSL numbers are CONSIDERABLY better and I think I must be not where I think I am in the filesystem or something. Gonna dig into that more if I have time.

      1. 3

        Probably won’t have time for much personal coding this week. Been running Ubuntu 20.04 Focal Fossa on Yamato - my battleship laptop, and really enjoying it. For a pre-release it’s surprisingly solid, but I’m having fun reporting the bugs I find and engaging the community to help out in what small ways I can anyway.

        This is a great way to contribute to a project! I love seeing people testing software and reporting bugs on it. Given how close Focal is to releasing, it’s good to see that you’re finding it to be a solid environment so far.

        1. 1

          Thanks a bunch! Eventually I want to write some Gtk programs in Python but for now this will have to do :)

          I’m super excited about the progress by leaps and bounds the Gnome project is making. It’s incredibly performant considering it’s running a bunch of web tech like Javascript and CSS under the hood!

    20. 1

      Work: I’m gonna change job starting next week, so I’m starting to look at the C# and .Net world. I’m moving from a Java techworld to C# primarily based company. So I started looking at how to build and run things, syntax all that jazz. I’m a bit lost at the moment, but if anyone has any resources to suggest feel free.

      Home: I bought Rimworld…. I will sink too many hours in that I can tell already. Might look at modding things, either helping mods move to 1.1 or just looking at how things work.

    21. 1

      I’m teaching a professional Master’s module on object-oriented design. This is the last time we’re running the course as is (which is UML-heavy, not too bad as that’s really the only “popular” tool for modelling software, and while people stopped using UML they didn’t really start using anything better), so the two of us delivering it are being hyper-critical about the whole course, then at the end we’ll have a big retro and work out what could be better.

      This is also part of my strategy to teach an equivalent level software engineering course to researchers, who often learned how to write software as a folk craft from their discipline’s elders, if they learned at all.

    22. 1

      I need to do a really good job of communicating something enormous to about 180 people and ensure they know how and why they should be involved with it right now despite all the other stuff they are busy with.

      I also need to get around to phoning a dentist.

    23. 1

      Adding a few last bits to my stupid simple file sharing project.

      And slowly (very slowly) working on my Mega Drive emulator. I’ve got a ROM parser done. Next up is the memory map. And also reading up about the 68000.

    24. 1

      Migrating a bunch of old apps off of a deprecated VM platform. Boring busywork, but I’d say that having machines stay running for 6 years without issue (and auto-updates) is a pretty good tradeoff.

      At work, continuing my work to opensource a tool we use internally that I built (modern, typed Py3!).

    25. 1

      I’m wrapping up helping a team of data scientists build a now ~160 page scientific paper for internal consumption. It’s been a blast and I’ll be talking about the process at Write the Docs in May.

      Ticketing and CFP for Heartifacts – a conference focusing on mental health, community building, and career management for software folks – is technically open but we’ve not yet actively started marketing it yet. That’ll happen mid-week.

    26. 1

      I’m trying to understand how one can track GPS units and draw them on Maps in real-time. This will help me to understand to develop a platform that will scale to tracking of many such units. I have this idea in my mind for a while and now trying to get some traction on it.

      Really hoping it will take me to places :-)

    27. 1

      I am setting up my home network. Running and pulling cables, drilling in walls and ceilings, setting up Opnsense, PiHole and my trusty old Dell R210ii. Thats about what I will manage this week,

    28. 1

      Hopefully back to my project of making it easy to write Android .apk-s in Nim with no need for JRE/JVM. Just an hour ago I seem to have managed to overcome one stumbling block that froze my progress and motivation for months. 🥳

    29. 1

      Working on fixing some bugs in my Kendryte K210 patch series for U-Boot

      And also prepping for my TF2 matches because if we win both my team makes playoffs.

    30. 1

      Working on a pet-project https://autosnoozer.com/ which can automatically snooze/unsnooze emails from Gmail to keep my Inbox neat.