In the last post I went over improving parsing errors in wunge, my binary data multitool. The other type of error a user can encounter is an evaluation error . This is when an expression is syntactically correct but can't be evaluated because it doesn't make sense. Here's an example of that: >wunge rand_incl(4, 13 + 5 days) Error resolving expression: can't translate time diff to…
I recently released my binary data multitool program called wunge . At its core, it's an expression evaluator, so it does lexing, parsing, and evaluation. This is such well-worn ground that I based this program off of a toy C compiler I made by following a book called Writing a C Compiler , by Nora Sandler. I want to focus on one specific aspect I wanted to improve over the earlier code from…
After releasing my last version of mathprobs, my dinky math game I made for my kid, I started work on the next additions to it. I have in mind certain effects that require drawing on empty parts of the screen. So far the game was set up to only render text and not any of the blank space, so if I want to do those other effects, I'd have to change something. I can think of two major approaches…
My kid G has to practice math for school but doesn't generally want to. I mean, who does? NERDS, right? I would do tutoring sessions at home to work on new skills they were developing, but a sticking point was basic multiplication tables. A lot of the stuff they're learning would be much easier if they had instant recall of their times tables. It's kind of like how reading becomes…
Today I found myself with a log file containing a dump of some binary protocol. I wanted to view it in a friendly way. Wireshark is one of the tools I reach for when I need to do this. It has a good visualization UI. If you've used Wireshark before, you know that opening pcapng capture files or taking a live trace is the usual way to get data into the UI so you can examine it. But how do you…
.cohost { color: rgb(131 37 79); } I've been blogging for a really long time. Looks like my oldest entries are back from 2002. It started on a self-hosted server that a friend ran, and when he shut it down I eventually switched over to using Blogger. I think that was well before Google acquired them. Times change, though, and I'm feeling a certain nostalgia for a simpler time on the web…
In mid-February 2024, I took an vacation with my family by airplane. I lifted a suitcase too hard, and injured my left wrist. Now, I didn't realize it at the time, so this is really just my best guess. I noticed a day or so later, when I had a lingering pain in the wrist when I bent it in certain directions. I continued noticing it for the entire week-long trip and then further in the weeks…
I've been messing around with custom ROMs for my OnePlus 7T phone. I wanted to document a few tips and tricks I ended up using, because most of the web sites with information on this seem kind of skeezy. My phone is a OnePlus 7T. I have no idea what other phones these steps will work on. Probably some other OnePlus phones, but I really don't know, sorry. Securely installing OnePlus…
we took a trip to south korea for 10 days with the family. we stayed in daegu, one of the largest cities. we visited some friends who helped show us around, and it was a great time. i've been to cities in the US and a bit in other parts of the world, but this one felt busier and more walkable than most i'd been to. for someone who has spent their entire life in rural or suburb living, it…
TLDR: here is a link to download the Jimu Robot App for Android (jiami-jimu-official_website-develop-62.apk) . I received this from the manufacturer when I emailed them. It's legit. I swear it doesn't have any viruses in it, at least not any that I put there. Using it, I was able to successfully build two of the robotic creatures, pair my Android tablet to the robot using Bluetooth, and…
(Cross-posted from my dev.to blog ) Have you played LOK ? It's a puzzle game in the form of a grid of squares with letters in them. You pick cells from the board in certain orders to activate "keywords" and then execute the effect of the keyword. The objective of each puzzle is to black out all the squares on the grid. I purchased the physical book a while back and finished it recently. I had…
Before I get to this project known as netcrab , I thought it'd be fun to share some history from Xbox's past... call it the origin story of this tool. Let's go back in time a little bit. The year was 2012 and I had joined the Xbox console operating system team a year or so before. We'd wrapped up working on one of the last major updates for the Xbox 360 and were well underway…
(Cross-posted from my dev.to blog ) Yesterday I hit an absolutely baffling bug with some Rust code I'm working on. Illustrating it is a bit contrived, but it's a cautionary tale, and there's not much I like more than sharing cautionary tales. I'm going to illustrate the bug I hit in a toy executable instead of in the context of netcrab, which is unnecessarily complicated. So…
So the other day I was summoned for jury duty in the state of Washington. I think it was the first summons I'd ever received. My work and general living situation were stable, so I didn't try to find a way out of it. I ended up being selected and then sat on the jury. I wanted to record my experience, because people seem interested and so that I can look back on it someday and remember…
(Cross-posted from my dev.to blog ) I bought a Framework Laptop a few months ago. I was really drawn to the idea of a laptop that I could customize and which was built with repairability in mind. That's a really great stance to take, and it didn't hurt that the laptop build and specs looked good, so I went for it. It was also cool that I could buy it with no memory, no hard drive, no…
(Cross-posted from my dev.to blog ) So I got nerd sniped by my buddy Snoopy the other daaaaay... He's studying CS in Europe and is writing a program for an assignment where he has to input some characters from the command line on Windows and process them. The relevant part of the program is pretty simple. It's like this: Scanner sc = new Scanner (System.in); String input = sc. next ();…
Has it really been almost a year since one of these? That's even longer than I expected. I think the six month point rolled around and I didn't have enough motivation to put pen to paper, so to speak. Now I've got way too much to cover, so probably this will be an unsurprisingly long one. Pandemic life, again In our part of the USA, vaccinations have started approaching critical…
It's been about seven months since the last post, and I've definitely accumulated enough material to type out about these two kids. Obviously in addition to whatever development has happened for them, there have been significant, world-changing events that are worth bringing up too, and I'm lucky to be able to say everyone here is safe and healthy. The majority of rapid development…
I suppose now that R has turned 1 year old I ought to give an update on how things are, huh? Lots of small changes have accumulated, many of them familiar from the first time around, and now it's reached a critical mass that deserves to be recorded for your benefit and for mine to look back on.
You know, some periods of your life move slowly and others move very quickly. The last several months have been both very slow and very fast. On the one hand, my parental leave time felt like it went on for a long time, due to how much work I was doing with the kids during it. On the other hand, it felt like both kids were changing in so many ways that I could hardly keep up. If there's one…
Well uh, it occurred to me that I never announced that we were having another baby. That whole period is now done, so... yeah, we have another baby now. Let's call this new one baby R. He's currently over two weeks old, and it brings back a lot of memories from the first time around with little G. Reading that post again, I'm finding a lot of similarities but also a lot of…
It's been, um, about five months. You know what? I'm not even apologizing this time. I didn't write and I don't feel bad about it! Turns out it's hard to keep track of all the tiny ways my boy is growing. But I can tell you about the big ways. There are some huge changes, and it's really cool and exciting. It's all just stuff I can sum up by saying, "he's…
[Insert long apology about being tardy yet again with a dadblog] [Insert excuses about being busy with work and whatever] [Insert usual trite announcement that many things have changed since last blog] Last time I wrote he was talking a bit. Saying individual words. And then a month or so later, something abruptly changed. You know, those big changes seem to come in the span of just a few days. I…
Once again I waited probably too long between blog posts. It's been about five months since the last one, which is like three thousand years in baby time. I don't know why I didn't write. Baby G has changed in so many ways since then, there's an endless catalog of things to write about. Not that it wasn't all along, but it's been such a joy to spend time with him.…
Oh boy, this one is going to be a long one, because I wrote half of it and then stopped writing it for a couple months. A couple months in baby time is, of course, like a hundred years, so there's a lot to go over. I really gotta get more timely about these. One year has come and gone for baby G. At this point, he's over 14 months old. When do I have to stop calling him that, anyway?…
Ahhh, the holidays are a wonderful time of the year. What? No, it has nothing to do with Christmas, or snow, or vacation. OK, maybe that last one. But especially because of the annual return of Advent of Code , an advent calendar of small programming puzzles that releases gradually throughout the month of December. The puzzles are self-contained, but some are still pretty tricky. It's a great…
When a mother takes leave from work when she's having a baby, they call it "maternity leave", but when I was filling out the paperwork, they didn't call it "paternity leave"; they called it "bonding leave". I thought that was fine, I guess, but why try to get all fancy about it? Then the other day on the radio I heard this talk show host ranting about how there shouldn't be…
I've missed um, months of dadblogs. That's my bad. It's not like baby G has been sitting still (oh no, much to the contrary, as we'll get into), but I just didn't quite have enough to write about for a while, and I've been busy doing other stuff on my usual bus rides--writing code, mostly. I actually started writing this a whole month ago but didn't finish it…
When working on dksfight , I needed to make some global maps to cache various things. Some of these maps were indexed by an integer, and others were indexed by strings. The values stored in the maps were various different types, doesn't matter. The keys presented a problem, though.
While I was working on dksfight , which was built with the mssql NodeJS package and Microsoft SQL server , I had a few places that used an UPDATE statement to modify some rows in the table. This is a short post about a snag I hit with these UPDATE statements in mssql.
It's nice to get feedback from your peers. I made a thing a while back, but I didn't tell many people about it because I had reservations. I solicited feedback from my peers about it, and I decided the thing I made had problems I needed to resolve before I felt good about releasing it. Well, I've now solved those problems, so I'm ready to tell the world about the thing I…
I've been working on a new project using NodeJS . Again, I'm using TypeScript for added safety, which means I have to (and want to) play nice with the type system. This code also uses ECMAScript 6 Promises for asynchronous database queries, and I ran into some funny (like funny uh-oh) problems here. But also solutions, so I thought I'd share.
I'm working on a web app project that uses a SQL backend. I wrote it originally using Ruby and MySQL, and I've been porting it to Azure and Microsoft SQL Server. You'd hope that creating the database schema would be the same for both, because it's all SQL, but nope, that's just wishful thinking. SQL has many flavors, and each of them support certain different things. T-SQL…
It's time for a baby G update. It's been about a month, and he's just turned 6 months old. A half-birthday. A hirthday. Impressive stuff, staying alive and healthy for the first half year of your life. And time really flies. It feels like it wasn't so long ago that his oversized head just flopped around on that twiggy, useless neck , but these days I just heft him up on my arm…
Aw dang, I missed a month, didn't I? I shouldn't do that, because around here everything moves rapidly. Every day I look at baby G and I see less of a baby and more of a little boy. It's exciting, and I'm excited. Someone was telling me the other day that moms tend to want their kids to stay young and dads want them to grow up, and I guess I fit that pattern for sure. The other…
center.babtweet { border: 1px solid black; border-radius: 0.5em; } img.babadootalk { display: inline-block; height: 2em; vertical-align: middle; } Guys, I did it again. I made another Twitter bot. This one absolutely crushes all my others on the "ridiculous idea" scale. I'm almost too embarrassed to share it with you. Almost. I was walking to my bus the other day, and for some reason, the…
This is a dadblog, but it's not really about baby G's development, for once. You might say this is about my development as a parent. As baby G has been growing, so too has the amount of food he eats (well, drinks, at this point). He started out drinking a mere 2-3 oz. of breast milk per feeding. Eventually, we weaned him off of that and switched to formula entirely. At the time I…
I lamented the other day that there is a paucity of information out there about Ruby+MySQL. Really, I was able to find basically one decent site , and even that seemed to gloss over some details in the area of concurrency and transactions. I wanted to know a bit more about how this works, so I ran some experiments.
We've now crossed the three month point for little baby G, and he just keeps developing at a steady pace, surprising us almost daily with weird, cool, and cute new things he starts doing and phasing out other behaviors like old clothes. Speaking of clothes, he really is outgrowing them constantly. Every week we have to go through his sleepers and figure out which ones still fit him. My wife…
Now that I'm nearly done with The Witness I can write some words about it. I had been looking forward to this game for literally years, having absolutely loved Braid . When it finally launched, it delighted and did not disappoint. If you haven't played it and plan to, you should stop reading now, because at its core it is a game about discovery, and I don't want to be responsible…
It's been another month, and baby G has passed the 2 months-old point. Happy 2 month birthday, little man! Oddly enough, 8 weeks for him was the last week of January. Can your science explain that ??
We have reached the one month mark for baby G! Wait, sorry, since I'm a parent now I have to count everything in weeks. In fact, it was five weeks this Wednesday. Happy birthweekday, baby G! You're all grown up now, horray! I jest, but he really is growing. He's gotten noticeably taller (longer?) than that first week, and he now clearly weighs more than the cat. That's our main…
So I guess I'm a dad now. That's pretty weird to think about, and it still hasn't quite set in. It's also weird to think about the fact that it happened in literally seconds. One second the baby was still inside my wife, who was at the time undergoing a c-section, and the next second they said from over the sterile curtain, "Dad, look!" as they hoisted the baby up, and…
Ahhh, with the release of Vimscramble squarely behind me, I can turn my thoughts to topics of writing more about Vimscramble, because I'm definitely not done! That first post was tame, an overview, barely an abstract or a synopsis. Now we dig into the fun stuff, the clanking machinery needed to bring it to life. Blieve you me, there's quite a bit of it. This is the post I've been…
center.vstweet { border: 1px solid black; border-radius: 0.5em; } img.vslogo { display: inline-block; height: 2em; vertical-align: middle; } About a month ago, I found myself doing one of the nerdiest things I can ever recall doing in my life: I was frying up 3 eggs in a slightly worn pan, but not to eat (not primarily , anyway). I was about to pose the scrambled eggs in the shapes of letters on…
PAX is dead. Utterly dead. For this year, at least. It'll be back, like six times per year now, it seems. But for now, it's dead and gone. All the guests have trickled out. There's still random glasses of water all over my house. Bedding is strewn everywhere--who knows whose it is by now. The house needs a good scrubbing from all the scrubs hanging out in it for five days. It's…
My sandwich-loving friends, I have been remiss. I've been tardy. I've been absent. I've been negligent, distant, and unattentive. I looked it up; it's been closing on two years since my last sandwich blog . What is going on, guys? [Just for] today, that all changes. Let's talk about sandwiches again, like the good old days. Five. Five is the number today. No, I'm not…
Super Time Force had been showing at PAX for years, so I knew the premise long before it came out: if you die, you can rewind and "co-op" through the segment up till your death to help succeed the next time. While that statement is patently true, it does very little to capture the many nuances of the game. I find that I'm the only person in my circle of friends really talking about STF so I…
The other day I finally published LavaMite , which is now happily posting to Twitter . That blog post was long, like almost 3000 words. I have at least as much more I can say about various things I encountered while developing it, so that's what this post is for. This one is all about nerdy coding stuff, you have been forewarned! Firstly, though, I should also say that I published the source…