Rather than study for finals this week, I spent my time moving this blog over to
Haunt. Previously, I was using Hugo, and while ox-hugo made the authoring
workflow tolerable, doing anything on the rendering side of things was unsavory
at best. I eventually had enough and decided to look for another solution, of
which Haunt was the most enticing.
read more →
My long-lived hiatus from capture-the-flag has come to an end, as I got off my
ass this weekend to play in PlaidCTF 2019. Being a one-man team is pretty
lonely, but my old team wasn't playing, and even if they were, I don't know if I
would've wanted to make the commute just to play with them.
read more →
As mentioned in the (now deleted) post I wrote describing my plans for 2019, one
of my goals this year is to get through at least 50 of the exercises on Dennis
Yurichev's challenges.re. I've decided to document my progress in the form of
writeups for the challenges I complete, batched in sets of ten exercises. For
each challenge, I'll try to explain the intuitions that brought me closer to
answering the recurring question from Yurichev, "[w]hat does this code do?"
read more →
In the introduction of the previous post I wrote for this series, First
Impressions of the Rust Programming Language, I alluded to the presence of
arguments that programming language safety should be achieved by moving to
languages such as Java which run on a virtual machine. While "safety" may no
longer be the first thing that comes to mind in discussion of these languages,
especially with the hundreds of vulnerabilities in various implementations
of the Java virtual machine, it would be unfair to deny that the principle of
running programs in a sandboxed virtual machine is safer than running machine
code directly. This post won't be making any claims about safety, though, as I'm
more interested in writing about my impressions from a language design
perspective. So, how does Java fare in this regard?
read more →
Slime the World was my entry to this year's Autumn Lisp Game Jam, and it managed
to win second place. The theme was slime, so it’s a game about covering
everything in sight with slime, and the dialect of Lisp I chose to use was
Fennel, a simple and elegant Lisp that I feel perfectly matches the simplicity
and elegance of Lua. It takes on a more "modern" style that I associate with
Lisps such as Clojure. I had initially pushed Clojure to the side, feeling it
was too different from Common Lisp, but now that I've had a positive firsthand
experience with a Lisp where lists aren't the data structure you always reach
for, I'm hoping to return to it with an open mind.
read more →
Recently, I read Michael Nielsen's essay, "Augmenting Cognition". It talks about some very interesting use cases for the spaced repetition software "Anki" that made me want to try it out again. I'm familiar with Anki, as I used it extensively throughout my last year of high school to study for AP exams. At the time, Anki's "killer feature" for me over similar software was being able to typeset mathematical notation in LaTeX (the exams were Chemistry and Calculus, so almost all of the material to memorize was mathematical notation). It's a great piece of software; I've been using it with the brother I'm helping through summer school. But ever since I began using Gentoo, I've been trying to avoid packages like QtWebView, which has deterred me from installing Anki on my machine. With a little bit of searching, however, I found that there was an Emacs package for spaced repetition named 'org-drill', so I decided to check it out.
read more →
C is almost 50 years old, and C++ is almost 40 years old. While age is usually
indicative of mature implementations with decades of optimization under their
belts, it also means that the language's feature set is mostly devoid of modern
advancements in programming language design. For that reason, you see a great
deal of encouragement nowadays to move to newer languages - they're designed
with contemporary platforms in mind, rather than working within the limitations
of platforms like the PDP-11. Among said "new languages" are Zig, Myrddin, Go,
Nim, D, Rust… even languages like Java and Elixir that run on a virtual
machine are occasionally suggested as alternatives to the AOT-compiled C and
C++.
read more →
It seems that the general consensus on "distro hopping," the act of constantly
switching between distributions of GNU/Linux, is that it's a bad habit that
should be consciously avoided. If you do a search for the term, you'll get
articles with titles along the lines of "How I Stopped Distro Hopping." But it's
also a term that gets thrown around loosely, and I think that that "distro
hopping" is an acceptable practice in a lot of the contexts where the phrase is
used. Needless to say, I've "hopped" distributions in the past month, and this
blog post is going to describe the highs and lows of that experience.
read more →
My capture-the-flag team played in the Insomni'hack teaser this year. During the
competition, I worked on a single challenge titled "sapeloshop." It was labeled
as "Medium-Hard," and it was in the binary exploitation category. The source
code for the server wasn't provided, so reverse engineering was necessary. I
don't think that having to reverse the binary was supposed to be the hard part,
as most of the behavior could have been inferred through some high-level
analysis, yet I spent nearly five hours fruitlessly trying to reverse it, and
the subsequent burnout was bad enough that I went home early. This wasn't the
first time a reversing task had gotten the best of me; there had been a few
competitions last year where I felt a similar loss in motivation. Noticing this
recurring pattern frustrated me, and that frustration drove me to think about
ways to improve myself as a reverse engineer.
read more →
My first experiences with Duke Nukem 3D were with EDuke32 ages ago. This was
back when I was running Windows Vista, and while my memory is a bit lacking, I
swear that I had working music then. Ever since I made the switch to Linux, I
haven't had working music playback in EDuke. Frustrated at the fact that my past
few years of Duke 3D have been devoid of all sound besides the screams of death
and Duke's trash talking, I've finally decided to troubleshoot it.
read more →