Feel free to tell what you plan on doing this weekend and even ask for help or feedback.
Please keep in mind it’s more than OK to do nothing at all too!
I bought a 2.7inch e-ink screen that I’m going to attach to my Raspberry Pi to build a dashboard with — and write a blog post about the journey.
The recommended refresh rate (for a full refresh, partial refreshes are lower) is 180 seconds. It’s also recommended to not leave the screen on 24/7 to avoid ghosting and other permanent problems. So there are some creative restrictions for the project!
I’m thinking of buying a Waveshare E-ink screen for my Raspberry Pi, so I would very much be interested in reading about the technical details of how it works out for you (especially if you’re able to build your dashboard in a coding language other than Python)
I’m probably going to use Python to communicate with the device. However, here’s a video of me running one of the example C programs https://twitter.com/healeycodes/status/1254065091143704576
Source code: https://github.com/waveshare/e-Paper/blob/master/RaspberryPi%26JetsonNano/c/examples/EPD_2in7b_test.c
One method of rendering is to create two bitmap images (one for the red color, one of the black color) and send them to the display.
That’s awesome! I prefer C, so that works out well for me. What’s the cable/interface you’re using to connect the Raspberry Pi to the screen?
I have the HAT version so it slots right onto the GPIO pins. It also comes with an 8-pin cable to use instead.
I want to submit the browser extension for my “social bookmarking 1.0” side-project to chrome and firefox’s browser extension “stores”. I got rejected before by Mozilla when I didn’t really understand that you can distribute internal testing builds privately. Now I’ve ported it to Chrome as well as firefox (pretty easy actually!) and have been using it for a while myself. This is a step towards (properly) opening it up to friends and relatives.
I also want to finish a blog post comparing the different typecheckers for Python. And spend lots of time with my son :)
I’m working on reverse engineering the entire engine of an older commercial PC game. It has an interesting esoteric scripting VM and is a good specimen as it has binary artefacts for x86 Win32, OSX PPC32(!) and Linux i386(!!!) available, which was especially uncommon for the time.
Which one ran on all three?
It’s a fairly niche game, Creatures 3, a sort of virtual life sandbox game which was originally released for Windows PCs in 1999. It later got a downloadable free standalone expansion which added online features around 2001, at which time a concurrent in-house Linux port was released (which was very uncommon, Unreal Tournament is the only title I can think of in the same vintage that got a port). The Mac port was done much later (2004-2005) with a rerelease and was handled by an external company.
Artificial Life was a pretty neat field when I looked at it. Vaguely remember Creatures. Cool that you’re working on something like that.
I am also doing this but concentrating on a DOS game from 1989/1990. The game uses a virtual 8/16 bit processor which I think allowed it to run on DOS, Amiga, Apple IIGS, and C64. I am reversing the DOS version.
Playing with Wayland and wlroots more, recreating the tinywl example in Rust. Slowly feeling like I’m getting the hang of it, I think. Wayland is intensely C-ish code though, so I occasionally feel like rustc gives me vaguely incredulous looks every time I use an intrusive linked list or conjure a pointer from a struct field into one pointing at the struct containing it. Just giving me big sad puppy-dog eyes and asking “but… but don’t you WANT me to pass this struct in registers?”
Also trying to crank up that whole self-care thing a bit more, since I’ve been feeling kinda crap the last week. More running, more sleep, more playing video games with boyfriend.
That’s pretty cool! Incidentally, I’m in the progress of doing the same, but in OCaml. I think it’s really interesting to explore how the C-isms can be expressed differently in a more idiomatic way in higher-level languages. For instance, so far it seems I can replace the use of container_of in event handlers by keeping a pointer to the data in the handler’s function closure instead, which feels a lot more natural.
I still have to complete translating tinywl, and I’m still following the general structure of the C code quite closely, but later on I hope that this will give me ideas for coming up with more “functional” ways of writing these kind of compositors.
That IS pretty cool, I wouldn’t have thought of doing it in OCaml. I think I would spend a lot of time worrying about whether the GC will suddenly move something that Wayland or wlroots has stored a pointer to.
That’s a very nice solution to container_of, I have to admit; in Rust I am not sure you can make a closure that’s callable from C, so I don’t think that would work for me. What I can do though is make a type that bundles together the wl_listener and some arbitrary data in a type-safe way. Whether this will turn into a morass of parent pointers and Rc‘s though, I don’t know yet. Like you, I’m just doing a literal translation for now and will try to smooth things out once it works.
Probably gonna branch out and see if I can cook more than spaghetti, stir fry, rice and other simple things like that.
I’m also having trouble waking up and coffee is having little effect. I think I might be going through the periodic quarantine “hell zone”.
Our mothership (based in Minnesota USA) gave everyone the day off on Mon to ease the pressure a bit.
That’s awesome. What company? :-)
I’ve had trouble with coffee recently. I normally drink it twice a day and now I’m cutting the afternoon coffee with a couple scoops of decaf. (Down from 4 cups a day.) Only having coffee once in a day every now and then helps me de-load a bit. (Though I’m not sure why that would be. I think the half life of caffeine is only a few hours.) YMMV
Started doing the same. I cut out afternoon coffee and instead make green tea.
If it makes you feel any better, I’ve 100% stopped caffinated coffee consumption and only drink decaf and green tea also. I feel way more consistently stable.
Have you found a good brand of decaf? I find it generally doesn’t have as much flavor.
Of all the ones, McDonald’s Decaf has been the best so far. Unfortunately there is not much choice here, maybe 5 brands or less total.
Interesting. I would not have guessed that.
I suggest pizza, anything with beans, and wraps. Since I’ve been cooking for myself for years, you begin to see everything is the same just presented in many different ways. Every dish is essentially wheat, veggies and meat.
The weekly menu I’ve created is essentially this in any order:
Last night I took a bunch of recipes I’ve been refining on cooking-stained paper and put them into a recipes.txt, like this:
Pizza dough (2): 0F 0min (1 1/2c warm water * 2tbs sugar * 8g/1pkt yeast) * 5min * (2tbsp oil) * (4 1/2c flour) * 65min * (salt)
It makes it super easy to write, read and share. 1 line = 1 recipe. * is left-associative :)
It would be cool for people to share theirs online in a distributed way. Like a web ring: https://mysite.com/recipes.txt , and at the end of each recipes.txt are links to more sites.
I have my recipes here: https://christine.website/blog/series/recipes
Check out Sam the Cooking Guy on YouTube. Entertaining, lots of swearing, while cooking very simple yet delicious food. He’s inspired me to try quite a few new things and our family is enjoying mixing up the home cooking.
I’m polishing Monokex, a Noise fork. The advantages over Noise are:
Do you mean https://noiseprotocol.org/? Your link to https://noiseprotocol.com/ seems dead.
Oops, my bad. Edited, thanks.
“working C code”
I like that part. I thought it would be great for someone to port Noise to a safer language or at least one with tons of analyzers/testers. C++ is incredibly hard to analyze.
Honestly, much could be gained for Noise if you could somehow compress the spec some more so you don’t have to be deeply into it before it starts making sense, like getting the central ideas out early on and giving a concrete example rundown of one protocol for illustration, perhaps. The PURB paper actually did a fantastic job building up to the whole protocol and it really helped understanding along.
I’m not sure we can compress the Noise specs. We could have the Noise Explorer or equivalent write specific specs for any given pattern, though. In general, though, Noise does have some avoidable complexity:
Okay, the last point isn’t really fair. The first three however probably makes Noise about twice as big as it needs to be. There’s room for simplification, even without going all the way to Disco: we just need a cipher, a hash, and key exchange (and an authenticator for the symmetric session afterwards, but we can use the hash to do that).
And if you don’t need to handle arbitrarily long payloads, there’s even a way to use Chacha20 to perform key derivation (though the exact security properties are more fiddly than that of a regular hash).
Speaking at the python pizza remote conference.
I have a talk on pydantic, a python library that adds amongst other things runtime type checking/enforcement to python classes and functions using standard python type annotations.
Good luck for your talk!
I just started flipping through the pages of http://learnyouahaskell.com last night and got hooked in from the first snippets of code. As a Rubyist I’m already in love, can’t wait to keep reading it through.
Learn You a Haskell is a pleasant read. If you need additional reading after it (which I definitely did), check out Real World Haskell which has more in-depth topics as well. Hope you have fun!
I’ve been messing around with implementing async in my microkernel, Rust really makes things a joy to program
The factory must grow. This is the way.
Roughing out an essay/chapter titled “Using Reverse TDD For Personal Learning”. It’s a bit of a lark, but should be interesting for some folks anyway.
I’ll have to figure out why my shutter-release cable isn’t working as expected when connected to my telescope mount. Assuming I can figure that out (or work around it), I will be taking another attempt at imaging M63. The issue so far has been that my camera is limited to 30 seconds exposures, or bulb mode; and I don’t have an intervalometer, nor can I control the bulb timer over USB.
Going to be getting groceries, cleaning a bit, and playing Path for Exile, as I recently picked up an Acer Nitro 5, and want to enjoy it.
Probable list of things
FWIW I wouldn’t call myself a “prepper” and I don’t think I’ll need to use this stuff anytime soon. But I do live in NYC so I figured why not just have the gear and view it as insurance, or if I have the urge to really go camping when it’s a better time. I don’t live very close to immediate family so having the option to camp out somewhere and survive for a few days puts me at ease. A lot of camping gear is on sale right now too.
On the subject of a “Bug Out Bag”. I find that it only makes sense to “But Out” if you live alone (it seems like you do, but you aren’t specific enough). I’m a big fan of the “Get Home Bag” concept in contrast. I recommend Warrior Poet Society’s videos on the subject:
Wow, he just released another video 2 hours ago, “Why I ditched my Bug-Out bag”: https://www.youtube.com/watch?v=RVdMHDaiaFs
This is a great video! I agree with him that from a security perspective, bugging out probably isn’t the best idea in most situations.
Given my situation where I live with my girlfriend and we don’t have kids, it’s easier for us to bug out compared to most people in NYC. Our immediate family is between 5-20H away. So getting to them would likely be a priority but it’s difficult to leave your community and friends many of whom are still here. Plus the journey could be dangerous. If I lived in the suburbs or owned a home with family closer by, then I don’t think bugging out would be a very good option.
Last production deploy as head of engineering at $CURRENT_GIG before starting as automation/release engineer at $NEW_GIG. Setting up new work computer - back to linux after forever on mac. I got a ThinkPad X1 Carbon, and I have found that KDE with a tiling Kwin script gives me the UX I want. It even works, mostly, with my 2007 vintage 30” Apple display
All this coffee talk down above/below reminded me that on Saturday mornings I enjoy getting up around 6AM, brewing some coffee, tossing a bit of whiskey in, and plopping down on the sofa with a nice book. I recently finished Rabbit is Rich (I’ve been reading the Rabbit series for over 10+ years now). It’s strange to realize that one is aging alongside a fictional character of another time and space. I’ve learned lots about Harry “Rabbit” Angstrom and he’s taught me a few things as well.
Otherwise, I downloaded higan in some foolhardy attempt to hack together something that would allow some Turtles in Time action via a shared emulation screen. It’s an idea that’s gestating so I’m not sure what will come of it.
Cooking a homemade focaccia pizza.
I’m revisiting Rust to write a small game with Godot. I still can’t believe how good Rust Docs / Tooling is!
Dark Souls progression: Dark Souls 3, at Aldrich now. Pontiff Sulyvahn was probably the second hardest boss I’ve ever fought, after Quelagg. Really the trick was to pump up my health and parry at least twice. He was a fun boss but resetting and the 1 hit kills didn’t make it fun until I upped my health.
Assembly: I’ve learned first hand assembly written by hand has a really hard time beating assembly generated by a compiler. This weekend I’m getting back to reverse engineering Kirby’s Dream Land 1, with the goal of learning about the Game Maker software HAL used internally.
Other than that I’m pretty “coded out”. I should probably read instead.
Oh I want to get into 3D modeling small objects. Like a light switch, or a die, using texturing and shading techniques rather than more polygons.
Redoing the foundation for a lean-to shelter in one of the fields which got lifted straight out of the ground and flipped on its back in a storm about a month ago. The original foundation was based on concrete plinths which were dug down in broken stone and gravel to a depth of ~50 cm, the new one uses the same plinths in which I mounted some rebar which connects to a rebar lattice through which they are connected. The thing is about 10x4m, 3.5m high, covered with a corrugated metal roof. It is meant as a weather shelter for horses and/or livestock, depending on what that field happens to be used by.
When I’m not doing dirty work like that I’m trying to integrate Jitsi-meet and my regular XMPP server in such a way that a single account can be used by both. Jitsi-meet wants to live in a subdomain, the XMPP-server serves a bare domain and I’d like to keep it that way. I used to use Ejabberd as a server but am now moving (back) to Prosody since the problems which made my move to Ejabberd in the first place - Prosody and Conversations did not work that well when using OMEMO encryption - seem to have been solved. Prosody is a much lighter and more hackable server than Ejabberd so I don’t rue the move back, even though it was initially brought up by my use of Jitsi-meet. I use Jitsi-meet for video meetings with more than 2 people, Nextcloud Talk for one-on-one video chats. Nae lairds, nae kings and especially nae proprietary video conferencing no matter whether it is looped through China or passes by Suckerberg.
I will be writing a simple script that grabs hacker news links with more than 25 points and sends you in an email. Furthermore I am also exploring new ideas such as how can I run a bash command on the server just by making a post request on a flask server.
If anyone got suggestions on cheap hosting feel free to let me know
The general solutions: Linode, DigitalOcean, Hetzner, etc. all are generally worth it. But if those are more expensive than you want, check out https://lowendbox.com/. Just be aware that you generally get what you pay for.
Making some progress on our new kitchen cabinets.
Our local housing association (think HOA but not as authoritarian) has their semi-annual cleaning day. This year, it’s combined with a yearly meeting outdoors to preserve social distancing. A lot of members are on the elderly side so I expect a low turnout.
Previous What are you doing this week.
Continue writing on my pure golang API for EFI. A bit fun reading 2500 pages of UEFI specifications to find structs and implement it. Super when you can verify it works by comparing my output with efibootmgr -v.
Currently in early stages, and contemplating renaming it to gofy; https://github.com/Foxboron/goefi
Second goal is to try find some python code in the Linux source tree I can fix up and submit. Get some patches upstream after using Linux for 10 years.
Then some patching to the reproducible tooling for Arch Linux :)
$WORK: N/A, +set mode weekend
$RELAX: Time to build some more toys for the puppy, she is getting restless. Since I forgot last post, here is more puppytax to make up for it. Begging for a piece of my chicken, Playing fetch the ball on a string. Incidentally the GFYcat shortname, ‘quaintlivelydrongo’ is darn descriptive.
$RESEARCH: Trying to generalise some sandbox escapes through Wayland to add to the infosec presentation buffer or CTF/pwnable challenge pile. Vuln+Infoleak is easy, robustness much harder. Also playing with libsignal-protocol-c and neovim UI api.
Need to organize my electronics and actually recycle/donate a bunch of items…
Given that at I’ve been reduced to 50% time at work since the lockdown started (I work for a ride-sharing company, not many rides are happing right now as you can imagine), I’ve had a lot of free time to work on my projects.
This weekend I hope to complete the first version of the CBOR encoder/decoder for Crystal I’ve been working on.
I’m having troubles reading a half-precision float and converting it to a single-precision float given that Crystal doesn’t have a Float16 type. If somebody wants to help we with that, shoot me a message, I’m really bad ad bit math and I’ve given up supporting half-precision floats for now.
Once finished, I can then continue on the WebAuthn library for Crystal l aslo started. I then plan to use this in a couple of other projects I want to do.
I’m building out more of my personal emacs config.
I’ve been working on a simple text mode windowing toolkit, and somebody asked me to support terminal resize. In addition to it being a huge retrofit, it is more challenging that graphical windowing systems for a couple reasons:
So I’m just starting to think about what this looks like, but it seems like a tough series of problems.
Reading The Little Typer and studying for my Calc 2 exam.
Playing Team Fortress 2 and reading Kafka on the Shore by Haruki Murakami. Also catching up on some social debt… I need to respond to some friends and family.
I’m going to try and make time this Saturday to work on some error handling and optimization in Envelope https://github.com/workflowproducts/envelope
I usually don’t have time M-F to work on our OSS stuff because that time is better spent billing clients, but it needs to get done at some point.
As an aside, is anybody interested in a coding stream? I had the idea last week, but I wanted to see if there was any interest before setting it up.
Play with kids.
Have S’mores at the fire pit.
Learn more nix.
I’m writing a parser/lexer for Core Erlang in OCaml. Eventually, I’d like to expand to constructing an entire compiler, but that’s in the future for now. Wrangling Menhir for the parser and making decisions about my AST design are going to occupy me for a while, I think.
I’m planning on writing the code that allows my personal information manager to sort images from my inbox into my GTD-like (virtual) projects. I currently have over 3.8k unsorted images, making manually selecting, opening, renaming, and moving them extremely tedious - I plan to implement something that picks out and displays images in order, allows me to quickly rename them (I think that maybe I’ll map spaces to dashes in the renaming interface), and then incrementally searches through my list of projects to place it in.
Probably going to take a moment away from code. Having enough time to do everything makes you *wanna* do everything and it’s just all catching up to me :)
Working on Remits. The prolonged isolation has made me less productive than usual so I’m thinking of streaming my work on the persistence layer on Twitch as a way to stay focused.
Also after building some things ontop we realized querying isn’t as flexible as it needs to be. So we’re working on a design for a simple pipe-and-filter query language. We tried to find an open source one, but most were too complex for our use case. If someone knows of a simple pipeline language in Rust though let us know!
Working on a little RPI3-based project as a gift for my friend who wants to have privacy by design
Mixed feelings about whether I should do this, but I’m probably going to dive into a work project, a redesign of a core piece of one of our systems that will require me to keep a bunch of fairly intricate details in my head to reason about what the new design needs to look like.
My manager is good about arranging things to give me stretches of meeting-free time, but as the senior developer on the team, even a meeting-free day is still full of little mental-context-demolishing quick questions from coworkers, code review requests, and so on. If I’m going to do a good job on this, I need a day or two without any junior engineers or product managers or customer liaisons hoping for a moment of my time, and more subtly, without the nagging little voice in my head that says, “You may be about to get a Slack notification or a PagerDuty escalation! Better be juiced up and ready to instantly respond to that at all times!” and makes it hard to deeply focus.