This is the weekly thread to discuss what you have done recently and are working on this week.
Please be descriptive and don’t hesitate to champion your accomplishments or ask for help, advice or other guidance.
Well I didn’t get anything done this weekend like I had hoped, lol. A friend of mine needed help (had an ER visit) and I spent most of the weekend helping take care of them. This week I want to work on the following:
I’ve also been working on destressing and doing daily meditation.
Thanks for the issue report! I’ll be working on it this week :-)
No problem. I’m just more amused it took me only 7 hours to go from vaguely hearing about Zig to segfaulting the compiler.
You did even better than that! When I fixed the Zig segfault, LLD deadlocked. https://bugs.llvm.org/show_bug.cgi?id=41508
I love it.
Been writing a small C library to pretty print debug/warning/error messages, so I’ll probably continue adding features to that. It’s intended to help me track program flow without bloating the final binary; subsequently, the entire library can be toggled at compile time with macros.
It’s nice because I get some pretty useful information at runtime, such as program timer, process ID, user ID, thread ID, filepath, function name, and line number. And I don’t even have to use any library specific functions if I don’t want to, it’ll just hijack printf().
Outside of work: I’m working on my idea for an IDE plugin that does coverage-directed fuzzing of a Java/JVM language method and shows input-output pairs that took different paths through the code. I think this is an interesting idea, but I keep going back on forth on whether I think it will actually be useful in practice. So the only thing to do is actually build it and see if I end up using it.
I did the core “hack” last year (https://github.com/hyperpape/QuickTheories): it can generate input-output pairs that took different branches when you feed it a property based test. That leaves the next steps of:
Work is really disorganized, but not too stressful. I’ve been juggling several things for the past week or two:
I’m starting my week nursing a diabolical hangover. I didn’t fall prey to natural selection this time, but I did come back from the bar with cuts and burns. We ordered drinks which were on fire, and then all of a sudden the bar was on fire, and my hand was on fire, and then I tried extinguishing the fire with a napkin, which only created a bigger fire.
After something so stupid, I am truly amazed people used to pay me money to write bank software.
I am continuing yak shaving in one of my Yesod apps. I’m building a feature where we white-list registrations. If you register with your work email address, we automatically associate you with your company and your appropriate role in the system. The work involves writing some custom authentication code (which actually Yesod makes rather easy), further developing my custom authentication plugin, and covering the whole things with a load of integrated tests. I’m using yesod-test, which is similar to Capybara but a little less featureful.
I’m going to try and find some land in West-Central Wisconsin to buy up for sprucing up so I can host a big party for my wedding next summer.
This week I’m sorting out SEO and Mailchimp integration with the 44CON shopify store. This is more involved than it first looks because we’ve kept everything fully separate for the best part of a decade, with conflicting data sources in different locations.
It also raises questions about things like retargeting mails, abandoned cart stuff etc. - I’m going to have a good old think about which of these are worth doing, and how we do so ethically - ie not spamming people for spamming’s sake. If anyone has any thoughts about things that they’ve found worked well without compromising respect for the shopper then I’d love to hear them.
I’m also doing some SEO/inbound clean-ups with respect to Google and Bing and on-page SEO for the more important stuff.
This week I’m adding more language features to slither, specifically I hope to add pattern matching. One of my main goals with this is to implement it without adding any new opcodes to the interpreter, which is key to making sure I’m at a minimal set of instructions to begin adding optimization paths in the future.
Finally as an “if I have time left over” project, I need to start adding tests to my Node.js WASI implementation. I can take some tests from wasmer and cranelift, but a lot of the tests will need to be written from scratch. As part of this I also need to figure out a good test harness setup for all the individual test files and cases.
Beginning to learn TypeScript in my spare time. I’ve just spent a few weeks doing slow, careful refactoring in a complicated pure-JS codebase, and I’ve had multiple instances where I know that if I was using TypeScript I’d be moving faster and more safely with my changes. Extrapolating that out, I’ve convinced myself that this is a real game-changer for complex and/or long-living applications. I think there’s a good chance that in 5 years companies that adopted TS today will be moving a lot faster, or being more productive with the same sized team, than those who stuck with JS. I want to be equipped with the skills to be on the right side of that change, if it happens.
And it’s fun to learn it, anyway - after 10 years of JS and Python it’s about time I exercised my brain with a typed language.
In my experience TypeScript is so much better, you’re not alone in thinking this.
A few bug fixes, a few tiny feature improvements. One thing our system does is send out ad hoc communications (emails, texts, faxes) to internal and external users. (For example, the software manages campground reservations and it’s often the case that facility managers need to communicate things to customers about the campground/conditions). My current task is building in a way of tallying up the number of successful sends and displaying that in the UI. It’s not exciting. This is Go and React. Mostly I work with the prior but I like to stay reasonably sharp on frontend matters.
In my personal time I’m brushing up on Scala/Akka and working on the Coursera Scala functional programming track. I’m also building a little Raspberry Pi box that measures decibel levels in our office and broadcasts a warning on Slack when it gets too loud, as it often does. After initially planning to do it all in C++ I finally caved and started writing it in Python.
At work, we’re working on porting a prototype SLO forecasting tool over to React. In particular, I’m doing most of the frontendy bits but our small team covers the entire stack. We have an in-house style library w/ React components so most of our internal tooling makes use of them rather than React necessarily being the best tool for the job.
Anyway, the idea is that the tool aggregates SLOs (that teams should already be measuring themselves) and then we can take that historical data and apply their past incidents. With those two bits of data, if they drop below their SLO (ie 99.9% availability), we can forecast how quickly they’ll get back on track based on said historical incident data.
That’s a high level overview anyway, there’s a bit more detail than that :) I’d be interested in hearing what others are doing in the SLO space! We don’t really do a great job of publishing these sorts of things in my opinion. We have a tech blog but most of our customers are inherently non-technical so there’s no real driver (sans recruitment but the benefit is intangible) to do write ups
The Lisp Game Jam starts on Thurdsay: https://itch.io/jam/lisp-game-jam-2019
This week I’m splitting my Java live coding time between JitterChat, an IntelliJ Plugin to embed the Twitch chat into a tool window, and my Kid Money Manager project (which is in production and being used by its first customer: me).
Also updating my “Human Learning” presentation for a local meetup in San Mateo, CA on Wednesday evening.
I updated my Elm-to-HTML static site generator this week.
Work: I am finishing my self evaluation and writing a metadata importer for our document management system.
We are about to open our product to schools! So finishing some details and optimizing a bit the infrastructure so we don’t die next week. Just finished a pretty decent optimization of a dynamic texture atlas creation service we have, went from 200ms/req to under 20ms/req (the target machines are shitty school computers, so we need all performance we can squeeze out of them, we generate texture atlases dynamically for each quest execution to reduce the memory footprint to the minimum).
I may do a writeup of how it works soon-ish if any of you is interested.
I’m updating my website and trying to write more about what I’ve been up to. I’ve done a fair bit of 3D printing lately, and I’ve been learning how to use OpenSCAD to design parts. I’d like to post some of these parts on my website (and thingiverse). To that end, I made an STL viewer using three.js so that I can display these parts more easily, and wrote it up as a post:
Starting on a new project with a React Native app talking to a large-screen graphical app (which someone else will write) in C++. Trying out using stent as a redux+FSM replacement; in a previous project I wrote a bunch of glue to tie a state machine library in with redux, which worked well enough but was a bit unwieldy, whereas this starts with the fsm from the ground up. Seems pretty neat so far. Doesn’t let you do all the very cool “fork”/“background” stuff that redux-saga does, but you can use generator functions as state transitions so you can do sync-looking(/feeling) async stuff in there very easily.
This week at work I’m going to be doing manual testing and bug fixing. Hoping it goes smoothly so I can get back to more interesting tasks.
Outside of work, I’ve made really good progress on my Common Lisp bindings to Blend2D. I didn’t have much luck with Swig, but cl-autowrap generated complete binding that are working really well. I was able run a quick and dirty benchmark and verify that Blend2D is in fact a lot faster than Cairo.
Unfortunately the “raw” API from cl-autowrap requires lots of manual memory allocation, so I’m going to create a higher level API that’s a little easier to use. I’m not sure what it’ll look like, but I’m having fun playing with the API and figuring it out. At the very least I need to provide several with-* macros.
So much yak shaving.
Still tweaking the updated infrastructure setup scrips as I find issues, which in turn are used to build vagrant base boxes (the config of which has required some tweaks, of course), which in turn are used by the app itself for the local dev environment, which thus requires some changes in the app’s templates so that an instance can be setup in the environment provided by the scripts in the first step.
All of which resulted from realising that the existing config for Redis (https://lobste.rs/s/78n430/what_are_you_working_on_this_week#c_fjcyjl) wasn’t going to work well in an environment with multiple instances of the application.
I’m tying up loose ends before going on an “extended leave of absence” (because apparently I’m not allowed to call it a sabbatical) :-)
getting my pipeline stuff to work consistently and have a good web interface for it. main pain points are dealing with sync between external sources and internal data and handling errors when sending messages. goal is to be able to do usual most tasks (user and admin) from the web interface (and fire a rails console as rarely as possible)
I’m continuing work on my message board. This week, after I sort out git merge hell, I’m going to focus on making voting/tagging items easily.
I’m working on a Nintendo DS demo for the Revision demoparty :) (it’s oh-so-not-finished-yet)