This Week’s Program: Dec 25 - Dec 29
Hello, my pen pals! It’s been nearly a month since I last sent this Tinyletter, and it was nearly a month before that one! As you know, I’ve been toiling away at a particularly persnickety problem. Go ahead and catch up on that last one if you hadn’t yet gotten to it for some important context about what I’ve accomplished in the month of December.
This also happens to be the last Tinyletter I’ll be sending in 2017. Happy New Year! 🍾
2017 in Review
Two years I’ve been writing this Tinyletter.
At the begging of the year I wrapped up my work on Hive City, my first foray into game development and first time working in the Elm programming language.
I also began a project called Mechwarper, a place to house my experiments and studies in configuration management with Ansible. The playbooks here manage my FreeBSD server. I expect to pick Mechwarper back up next year.
Starting in February, nearly all of my attention and focus with regard to my side projects has been dedicated to my first ever project with the Racket programming language. In retrospect, I can’t believe I’ve been working on Overscan for nearly the entire year. I never expected this project to become so ambitious. I have really enjoyed working on it. Through my work with Overscan I’ve learned a whole heck of a lot about software and computers, and I feel excited enough to keep plugging away at whatever this thing will shape up to be.
And for the curious, here’s my review of 2016.
In my last letter, I wrote quite a bit about my pursuit of building a cross-platform video display using Racket’s own GUI toolkit.
The month since has been, at times, incredibly frustrating and, now, I’m happy to say, very rewarding.
I went about this in two ways:
- Understanding everything I could about the GStreamer OpenGL Library.
- Understanding everything I could about the GStreamer Video Library.
I explored both options at the same time. The OpenGL approach required
a fairly deep knowledge of the APIs
GstGLContext, and I was pulling out my
metaphorical hair trying to
work. Eventually, I had to step away from GObject Introspection, and
drop down to the FFI lib level, which was fine and it all works and it
sure beat having to learn lldb. Oh I said “it
all works”. Lol no, spoke to soon. Through all the work needed to
scaffold this, I never got this OpenGL pipeline to actually display
something on the screen.
The thing that I finally got to work was
gst_buffer_map to (eventually) get access to
the bytes of each video frame (I never
gst_video_frame_map to output what I
needed). When the
caps are set to format the video
ARGB, I can write this bytestring directly to
a bitmap. What I get
is a smooth animating video running in a little window controlled by
the Racket toolkit.
What a grueling feature. I learned a huge amount in the process of building it out. My git history is a bit of a mess, and all of this code needs to be cleaned up and documented, but boy am I happy to finally get the result I was looking for.
Thank you for reading my writing and my code in 2017. I am so grateful for your readership and the slice of attention you’ve devoted to me.
Next week, I’ll kick off with my First Week of 2018 post (now an annual tradition). But I’m in a bit of a rut with this Tinyletter, which you may have picked up on from the lack of consistent posts. I still see the value that this writing exercise provides, but I’d like to change things up a bit. And I’m open to suggestions! What would you like to see This Week’s Program look like in 2018? This is, after all, your inbox, and I’d love to make sure that you get the most you can out of the experience.
Here’s to a fantastic year ahead,