It’s monday again, feel free to post what you’re working on this week.
I’m helping a friend write the software for a little gadget that lets kids enrolled in a local dance school unlock the front door with RFID cards (a “smart lock”). We already made a similar gadget that just registers their presence, now we’ll hook up another Raspberry Pi to the same database, with a card scanner and a 12V relay for the door’s magnetic lock.
Interesting. I’ve been meaning to do something similar at home. I’ve got a few Raspberry Pies collecting dust, assorted electronics, bread boards and relays, and I recently bought an electric door strike plate. My idea is to mount it to the back entrance door to our apartment so the kids can open the door with their own RFID tags.
We live in an apartment building and the keys that open the apartment doors are ~80 USD a piece, which is a bit steep for something that may easily get lost (and rekeying all the locks is probably a lot more expensive). Instead the kids could each get a key that only unlocks the outer doors in the building (~30 USD) along with an RFID tag, which would be much easier to replace.
Posted a new theft release, 0.4.4, which includes a couple bug fixes and Makefile improvements that shouldn’t wait until the 0.5.0 release is ready…And then 0.4.5 shortly after, because someone pointed out I’d missed the version in the pkg-config file. Oops.
Aside from multi-core, another major change in 0.5.0 is that I’m expecting to swap out the RNG. I’ve previously been using the 64-bit Mersenne Twister, which is statistically good enough, but rather slow, and aside from user code, theft spends most of its time in the RNG. I tried xoroshiro128+, but ran into some issues with output quality, and the author has since deprecated it in favor of xoshiro256** (note: same page, and no ‘ro’). xoshiro256** seems better (at least, it doesn’t have patterns/gaps in the output that cause my “should eventually find the minimal failure case” tests to fail), but I’m also strongly considering PCG, because I feel I understand why it works far better than with xoshrio256**. (I recommend O’Neill’s RNG talk, btw.)
Work: Among other things, working on some succinct data structure implementations, and a library which builds on them to create a highly space-efficient trie. Both will eventually be open-sourced.
It’s cool you work somewhere that lets you open-source stuff like that. Unless you’re an independent contractor/consultant working for yourself. Well, that’s even cooler. ;)
Late last week I did a soft launch of my synthesizer VST plugin slightly ahead of schedule due to a high-profile electronic musician using it on a Twitch stream for several hours. It was unexpected, but served to force my hand somewhat in regard to putting the website and final 1.0 builds up.
Next steps for me are finishing up the user manual and then doing a PR push of some sort – posting on forums, making a bit of noise about it. It’s my first time releasing a product on my own, and a B2C one at that, so there’s a lot of learning to be done still, but, hey, on the home stretch of the home stretch now.
Could you give a bit more information on the performance? Who exactly has used the plugin, and is there a recording of it? Thanks!
Of course! It was Deadmau5, and there’s an archive of the stream on his Twitch channel.
That indeed is as high-profile as they get! Congratulations!
At work: trying to provide colleagues with reproducible builds by moving complex build steps that are currently only written as groovy scripts that run on Jenkins build agents to MSBuild. This includes replacing a custom dependency management tool that was written (less than a month ago!) with a NuGet repository.
But the really interesting stuff is happening outside of work. I’m on my third consecutive week of quite good mental health: possibly the best weeks I’ve had in a few years. As such, I am hoping to make the smallest amount of progress on the following:
Astute readers will notice that aside from guitar practice, my goals are incredibly vague and easy to accomplish. This is by design: I don’t want to ruin a good run of mental health by trying to take on too much too soon.
I’m a big fan of the idea of easy goals. Not taking on too much makes it more fun, and tiny progress over time is better than getting tired of the whole project after a week.
Tonight or tomorrow, I’m going to release CHICKEN 5.0 RC3. After that, I’ll probably be doing some tinkering for myself. If it turns into something I might blog about it. Perhaps I’ll also help people port some more code to CHICKEN 5.
Also, in the interest of dog fooding, I should upgrade my personal VPS web servers to CHICKEN 5.
I’m still working on that dang Clang static analysis feature. The amount of documentation I have to wade through is astounding. Off-hand: does anybody know how to check if a RecordType is actually a C++ class or struct?
On the side, I am writing – just bits and pieces, but it helps me understand what I’m programming.
I didn’t touch that part of the code when I was working on LLVM, but your best bet is to ask the LLVM Developers Mailing List. They get questions of this nature all the time and are good about answering, based on my experiences.
Good point – thank you for your suggestion.
I love the clang static analysis! It’s integration into vs code is so slick, I feel I have a C++ REPL. I would say that it is the single feature that’s made me keep using C++ especially “modern” C++ which has many more corners than whatever it was we were using back in 1999.
Leveraging lwan’s straitjackets (read: chroot jail + privilege drops) for my website (MOAR SECURITY)
Leveraging lwan’s straitjackets (read: chroot jail + privilege drops) for my website (MOAR SECURITY)
Appreciate the reminder about lwan. People are often talking about language rewrites or compiler transformations for stuff like Nginx that’s 100+ kloc. The lwan codebase was doing really good on fuzzing, is supposedly easy to read, and page says about 10kloc or so. Also, any improvement might benefit embedded since it’s used there. SCADA and IoT that hackers are currently focusing on a lot. So, lwan seems like much better target for people wanting to use PL research or security tools to improve a web server.
I’m playing around with a tiny dynamic arrays library for C that uses the same approach as sds.
Also if I’d have time I’d continue hacking on prom which I’m trying to make an interactive strace out of. Other than that just normal day job work.
At work I’m still on the triage team handling incoming cases from our test team, and fixing bugs here and there. I’ve started using org mode to track and document all of my work on these triage cases, and it’s making me a lot more efficient.
Outside of work I got the OCR for my book scanner to work. Unfortunately, I have 3 webcams (a standalone Logitech, and the ones in my iMac and MBP), and none of them focus quickly enough or have the image quality to make scanning as seamless as I’d like, so I’m going to use the gphoto2 bindings I started a while back, and doing the scanning that way. This week I’ll be reviewing where I was on the gphoto2 bindings, and filling in the missing parts to work with the book scanner.
I’m also (finally) making an effort to learn the keyboard I bought back in January, so I’m practicing for 30 minutes every day.
I am on vacation and thus free from $DAYJOB; I am working on elvish, trying to finish off some major refactoring efforts.
Other than that I am also reading the Perl 6 Language Documentation.
Working on version 3 of Proof-of-Growth algorithm in Merit. Version 2 was great but not perfect. We took community feedback to heart and started work on fixing the issues people are having.
Over the weekend I was mostly discovering and reporting bugs, and got bytesparadise/libasciidoc working on my Gitea with some hacking around the missing support for two-line titles.
Right now I’m rewriting my little scripting language from C to Go because it seemed fun and who knows, I might get to use it in the sense of Emacs Lisp one day.
Aaand, done. That wasn’t too bad.
I’m migrating away from Gnus to Notmuch for managing mail in Emacs. Neither is perfect but my trial run of Notmuch was very favourable and it’s nice to have a decent mail search that works on the command line.
I ordered a Clueboard and hopefully it comes this week so I can start tinkering with QMK firmware.
Giving the finishing touches (live on Twitch streaming for my first time) to this extension for PyScaffold: https://github.com/pyscaffold/pyscaffoldext-custom-extension
PyScaffold is a tool to create Python projects with the most solid tools available in the ecoysystem. It can be extended to add more features, more tools, more options.
My extension allows you to create projects that will implement new Pyscaffold extensions. An extension for extensions. Metaxtensions. It’s always a headache to understand at what level I’m operating.
I finally launched Moneygains — a price comparison app for residential energy tariffs in Northern Ireland.
I still have some more minor details to iron out, and my business partner is negotiating terms with the five main energy suppliers in NI. We’re in negotiations with one, which is why there is only one logo visible in the app.
Built with Haskell, Elm, PostgreSQL, and NixOps/AWS.
Congratulations on the launch!
Thanks very much! The related landing page is here.
I’m surprised how much work had to go into this. I thought the project would be quite clean-cut and straightforward, but with the comparison logic, and only having time to work on this around my day job and my other two “side projects”, it was quite the handful. My first commit was eight months ago on February 3rd.
Using typed FP languages was a huge benefit to productivity, and saved me lots of potential extra QA work. Bugs were quite rare, and most of them were as a result of calculating projections/discounts/taxes incorrectly. This is where a test suite was invaluable.
My experience working on this project and my other typed FP projects has solidified my opinion that “types don’t protect you from everything, therefore don’t bother with types and just use tests” is an incredibly dumb opinion that is unfortunately quite common in the industry.
$HOME.push( wash dishes );
At work, I’m working through a maintenance backlog this week, and/or keeping up with tickets/issues coming in. I’ll also be refocusing on studying for an upcoming certification.
Outside of work, I’ll be working on clearing up some space around the house by organizing some things a bit better, and I’ll be working on learning how to use F# and .NET Core to build tools and websites on Linux.
I’d also be interested in finding out if F#/.NET has a way to target the termux “Linux shell on Android” environment, without going through the pain that is building a mobile application using Android Studio.
I’ll probably be spending my evenings digging into remacs and porting some C functions to Rust.
I’ll also try to make my X11 protocol compiler generate code for all constructs, even though it’s still missing many passes. Reading the post on incremental results from a few days ago made me want to get my library to draw a rectangle on screen asap, no matter how many improvements could still be made. Though between remacs and the new $DAYJOB I doubt I’ll manage to do it this week.
Moving across the country, so lots of packing, logistics etc. This is a culmination point of a project I started 2 months ago with the goal of doing more BSD development on a daily basis. If someone wanted to sabotage me at this time one would only need to steal my bullet journal - I wouldn’t be able to pull all this off without it :D
I’m on vacation in Porto :) Have a great week everybody!
Honestly? Passing the days until I can start my first 4-week vacation in 6 years. At $work, this happily coincides with a week heavy with meetings, which I mind a lot less than usual.