Category Archives: software engineering

Game design and finding Signal in Noise

I just had a thought about this, so I better write it down so I can think about it a bit more. One thing I’ve noticed from looking at code for puzzle games (like Unruly aka. Tohu wa Vohu by Adolfo Zanellati) is that it is often easier to create a game by working backwards from the solution and adding noise or hiding information. In the case of Unruly, the game actually uses a solver to create the problem, thus ensuring that the result is solvable.

Or in the case of Bejeweled or similar match-3 type games. You can create a valid game starting board by first putting in a working solution in a problem space then filling in the area around it with empty spaces or ‘noise’ of randomly selected pieces. Then the challenge to the player is to find that solution, the ‘signal’ in all the random ‘noise’. This bit of inspiration came in really handy in one interview where I was trying to do something very similar.

Maze generation can be like that too. Start by creating a random path from start to finish, then randomly branch off in different directions to create noise and hide that solution.

This works for game design. I’ve often found in puzzle games I enjoy making order out of chaos. Think of how Tetris works by taking random pieces and fitting them neatly together in order. So finding that working signal in all the noise is satisfying.

Interviewing Resources for SW Engineers

I recently went through a big round of interviewing and job searching for SW Engineer roles. I wasn’t fully prepared, and don’t think I could ever be fully prepared. Interviewing is hard and strenuous and nerve wracking and I honestly hate it. But the preparation I did helped. So this post is to collect some of those preparation points, and I hope to do some other separate posts about particulars.

Continue reading

Book: Clean Code

I wanted to do some on-screen time (which I’ve been bad about for far too long) so yesterday I pulled down a book I’ve had for years but barely cracked. “Clean Code” by Robert C. Martin is usually wedged between Software Requirements fro.Microsfot Press and Extreme Programming Explained, and under Secure Coding. I don’t really read many technical books: I prefer a good reference book like the old Java in a Nutshell books. So we will see what I get out of this run.

Early impressions are that this seems like a thick book for some simple concepts. The first chapter is a lot of quotes and stories to motivate and give the reader a desire to read the book, but I just skimmed it, as I think most people who would read the book would have already seen bad code and know the need for clean code.

From DVD to .iso in openSUSE in bash

Just a quick note on something I found that was super useful. My new laptop doesn’t have a DVD drive, so I needed to rip an .iso file on one laptop to copy to the other. After some googling, I found https://forums.opensuse.org/showthread.php/385648

The short version is:

<assuming your DVD drive is at /dev/sr0>
> isoinfo -i /dev/sr0 -d
<that gives a bunch of info, look for "Logical block size" and "Volume size">
...
Logical block size is: 2048
Volume size is: 1880567
...
> dd if=/dev/sr0 of=./some-img.iso bs=2k count=1880567

I think there is also a way to get progress out of it using status=progress but I haven’t tried that yet.

Apache Cassandra, bad assumptions, and unit test shortfalls

This is a story about a problem that took a long time to solve. As in, no one noticed it was a problem for a couple years then it took another year to solve. It involves using the time series database Cassandra, some bad assumptions made by the initial programmers who were more used to relational databases, and a reliance on unit tests that test for a short period of time but miss long term problems. And there is a bonus, somewhat related story at the end.

Continue reading

Basics of Echo Cancellation

There is some cool math and lots of advanced stuff going on in echo cancellation, but for this post I’ll just talk about some basic concepts and what you can do to make it work better if you ever need it.

Back when I worked on a telepresence product I got to play at being an audio engineer. Not that I was really great at it, but I got to work with some engineers who were really, really great at it, which made it fun and educational. So I want to write down a few things to share that I learned that may even be useful to remote workers trying to get the best out of their video conference sessions.

Continue reading

Remote Work with Family Members who Aren’t at Work

I have kids. I love them all, but they can be distracting at times. Normal work days 2/3rds to 5/6ths of them are in school and the house is pretty quiet, with a few bumps from the preschoolers. But during summer, or holiday breaks, or global pandemics, there are times when my house is full of family members who aren’t at work like I am. So how do I handle it?

My first set of points about this:

1. Set some expectations that your are “at work” and can’t respond to every little request all day.

1a. Having a door on your office or room you work helps with that. I know that is a challenge for those working from home only temporarily, but look for other ways to formalize some distance. It helps with the “I’m at work” state to have a physical indication.

2. Take breaks to interact with the family, like at lunch or afternoon walks.

3. Some music or controlled noise helps drown out background distractions.

4. Keep a list (at least mentally) of the things you wish you could do with them during the day so you can find other times to help with art projects or math problems.

It takes a bit of reinforcement and some consistency, so don’t give up if the first day has a lot of interruptions.

Also, everyone should agree that ‘working from home’ is not a substitute for good child care. You won’t be doing your job honestly if you claim to be working but spend all your day doing stuff for the family.  Flexibility to watch your kids for a bit while your spouse runs to the store or an appointment is great, but don’t abuse it and expect to be successful.

I’m sure we will see lots of posts about this in the next few weeks, and here is a good one to keep from going crazy.

Link refresh: remote vs co-located

A while ago I linked to this article – http://martinfowler.com/articles/remote-or-co-located.html – about remote vs co-located teams and which are more effective. I think it still holds up as a good article for guiding thoughts about how to make your team more useful whether co-located or remote or some blend of the two.

Most of the teams I’ve worked with in the last 10+ years have been a mix, with some chunk of the team located at one or two sites and a few more scattered around the world. In those cases, it has helped to get the office-located teams to think about “remote first” modes of communication. Sometimes that becomes “lowest common denominator” communication, where if any one person is on the phone then everyone does the meeting from the phone at their desk. That does help level the field, but when possible it is better to bring everyone up to a higher level with video conferencing or collaborative document editing.

It also helps for the Scrum Master or manager or leads to coach the team about how to communicate with everyone in a way that each team member is not left out or marginalized. That is a great topic of discussion in retrospective meetings.