MONTHLY 5 - APRIL 2020

Advertisement
https://collectionchamber.blogspot.com/p/3d-ultra-pinball-thrillride.html https://collectionchamber.blogspot.com/p/castle-of-dr-brain.html https://collectionchamber.blogspot.com/p/blog-page.html https://collectionchamber.blogspot.com/p/plague-in-maze-of-mind.html https://collectionchamber.blogspot.com/p/virus-game.html


Occupy your quarantined mind with April's selection of games from the Collection Chamber. Flip some balls in a theme park in 3D Ultra Pinball: Thrillride (2000 Dynamix). Solve some science puzzles in The Castle of Dr. Brain (1991 Sierra On-Line). Enter a VR sporting tournament in Locus (1995 Zombie LLC). Cure infected minds in Plague: In the Maze of the Mind (1996 Microforum) then cure infected hard drives in Virus: The Game (1997 Kiddum Multimedia & Telstar Electronics). Head on in to check them out.

Read more »

Streaming, Gaming And Podcasting

Advertisement
I had an opportunity last night to be interviewed by Hobbs of Hobbs & Friends, a long runing RPG/OSR-friendly podcast. We were talking about Three Hexes, as well as talking about how to transition between mass combat and 1:1 D&D scale - a subject that is near and dear to my heart!

The way Hobbs does it, he streams as he records his podcast, giving his audience a chance to interact and see things as they're done. Here's a link to the stream video!

Watch Hobbs & Friends #60 from Hobbs665 on www.twitch.tv

It had never occurred to me to do this, but the folks that were there had great feedback and questions, which made the whole thing a ton of fun! I enjoyed it so much that I think I'm going to do that as well.

If you'd like to see these streams, here's my own channel!

Watch live video from Chgowiz on www.twitch.tv

I have been a lot more busy with gaming during this time than I had planned! Between the games all going virtual for the time being, I'm also volunteering to run more games at conventions or just as pop-up events. I have a dungeon delve tomorrow (Sat 4/4) at 9am Central (UTC -6). Then, on next Sat 4/11, I'm going to be running a one-shot OD&D game for folks from the OD&D 74 Proboards forum! We'll be taking a dive into B1 - In Search of the Unknown... with some twists and turns that I'll be dropping in! Muahahaha... Come play!

Brainstorming With Reversal

Advertisement

In the previous two posts I described how I sometimes approach a problem by trying to arrange it into a matrix. Sometimes that doesn't work and I instead try to look at the problem backwards. As an example, consider procedural map generation. I often start with a noise function, adding octaves, adjusting parameters, and adding layers. I'm doing this because I'm looking for maps with certain properties.

Map of a procedurally generated island

It's fine to start by playing with parameters, but the parameter space is rather large, and it's unclear whether I'll actually find the parameters that best match what I want. Instead, after playing around a bit, I stop and think in the opposite order: if I can describe what I want, it might help be find the parameters.

This is actually the motivation I was taught for algebra. Given an equation like 5x² + 8x - 21 = 0, what is x? When I didn't know algebra, I would've solved this by trying a bunch of values for x, jumping randomly at first, then adjusting it once I felt I was getting close. Algebra gives us the tool to go in the other direction. Instead of guessing at answers, it gives me tools (factoring, or the quadratic equations, or Newton's iterative root finding) that I can use to more intelligently find the values of x (-3 or 7/5).

I feel like I often am in that same situation with programming. For procedural map generation, after tweaking parameters for a while, I stopped to list some things I wanted for the game worlds in one project:

  1. Players should start far apart on the beach.
  2. Players should move uphill as they level up.
  3. Players shouldn't reach the edge of the map.
  4. Players should join into groups as they increase in level.
  5. Beaches should have easy monsters without much variation.
  6. Midlands should have a wide variety of monsters of medium difficulty.
  7. Highlands should have hard "boss" monsters.
  8. There should be some landmark to help players stay at the same difficulty level, and another landmark to help players go up or down in difficulty level.

That list led to some constraints:

  1. The game worlds should be islands with a lot of coastline and a small peak in the center.
  2. Elevation should match monster difficulty.
  3. Low and high elevation should have less biome variation than middle elevations.
  4. Roads should stay at a fixed difficulty level.
  5. Rivers should flow from high to low elevation, and give players a way to navigate up/down.

The constraints then led me to design the map generator. This led to a much better set of maps than the ones I got by tweaking parameters like I usually do. And the resulting article has gotten lots of people interested in Voronoi-based maps.

Another example is unit tests. I'm supposed to come up with a list of examples to test. For example, for hexagonal grids I might think of testing that add(Hex(1, 2), Hex(3, 4)) == Hex(4, 6) . Then I might remember to test zeros: add(Hex(0, 1), Hex(7, 9)) == Hex(7, 10). Then I might remember to test negative numbers too: add(Hex(-3, 4) + Hex(7, -8)) == Hex(4, -4). Ok, great, I have a few unit tests.

If I think more about this, what I really am testing is add(Hex(A, B), Hex(C, D)) == Hex(A+C, B+D). I came up with the three examples based on this general rule. I'm working backwards from this rule to come up with the unit tests. If I can directly encode this rule into the test system, I can have the system itself work backwards to come with the instances to test. This is called "property based testing". (Also see: metamorphic testing)

Another example is constraint solvers. In these systems you describe what you want in the output, and the system comes up with a way to satisfy the constraints. From the Procedural Content Generation Book, chapter 8:

In the constructive methods of Chapter 3 and the fractal and noise methods of Chapter 4, we can produce different kinds of output by tweaking the algorithms until we're satisfied with their output. But if we know what properties we'd like generated content to have, it can be more convenient to directly specify what we want, and then have a general algorithm find content meeting our criteria.

In Answer Set Programming, explored in that book, you describe the structure of what you're working with (tiles are floors or walls, and the tiles are adjacent to each other), the structure of solutions you're looking for (a dungeon is a bunch of connected tiles with a start and an end), and the properties of the solutions (side passages should be at most 5 rooms, there are 1 or 2 loops, there are three henchmen to defeat before you reach the boss). The system then comes up with possible solutions and lets you decide what to do with them.

A recent constraint solver got a lot of attention because of its cool name and demos: Wave Function Collapse. You give it example images to tell it what the constraints on adjacent tiles are, and then it comes up with more examples that match your given patterns. There's a paper, WaveFunctionCollapse is Constraint Solving in the Wild, that describes how it works:

Operationally, WFC implements a non-backtracking, greedy search method. This paper examines WFC as an instance of constraint solving methods.

I done much with constraint solvers yet. As with Algebra, there's a lot for me to learn before I can them effectively.

Another example is when I made a spaceship where you could drag the thrusters to wherever you wanted, and the system would figure out which thrusters to fire when you pressed W, A, S, D, Q, E. For example, in this spaceship:

Example spaceship from a project of mine in 2009

If you want to go forwards, you'd fire the two rear thrusters. If you want to rotate left, you'd fire the rear right thruster and the front left thruster. I tried to solve this by having the system try lots of parameters:

Possible movements of spaceship

It worked, but it wasn't great. I realized later that this too is another instance of where working backwards would have helped. It turns out the movement of the spaceships could be described by a linear constraint system. Had I realized it, I could've used an existing library that solves the constraints exactly, instead of my trial-and-error approach coming up with an approximation.

Yet another example is the G9.js project, which lets you drag the outputs of some function around on the screen, and it will figure out how to change the inputs to match your desired output. The demos of G9.js are great! Be sure to uncomment the "uncomment the following line" on the Rings demo.

Sometimes it's useful to think about a problem in reverse. I often find that it gives me better solutions than if I only consider the forward direction.

The Year In Review, Just The Leisure Time

Advertisement
Last January I did a review of how I spent my leisure time the previous year, and I set down a few expectations for the coming year, now past. It's time to look back and see how my actual activities stacked up to my expectations, and maybe learn something for the fresh year to come in 2020. I had big ambitions between reading, blogging, and playing, and not all of them were achieved. But, that's okay because it makes it easier to figure out what I want to do this year—some of what I didn't finish last year, and some new ideas and desires. How I spend my leisure time is very important to me. It should be at the same time relaxing and reinvigorating, enjoyable and enriching, soothing and stimulating. If one thing is obvious, it's that I still love to read because it hits all of those notes, and that is likely to continue in the year(s) to come.



Blog Posts

I'll start out again with what I've done on my blog, and I very nearly did everything I set out to do. I wrote 17 posts (not counting this one) instead of the predicted 18 because of how the 3-week intervals fell. They were almost all Tech Book Face Offs, except for the last two that were a general review of books I will read again and programming practice sites that I've enjoyed, and a random Physics Book Face Off that I threw in there in April to mix things up.

The most popular post by far was the review of books that I'll read again, which racked up over twice as many hits as the next most popular post, and it was pretty fun to write as well. This was not your normal list of best books because I'm tired of reading best-programming-book lists that put up the same old safe books like CLRS or Knuth's The Art of Computer Programming. This post had a little of that just because some of those books are great to reread, but these were all genuinely books that I want to read again, not just because they're instructive, but because they're enjoyable reads. They make my brain tingle. They get me excited about programming and learning (or relearning) new things.

Of the Tech Book Face Off posts, the top three most visited ones were Python For Data Analysis Vs. Python Data Science Handbook, How To Design Programs Vs. Structure and Interpretation of Computer Programs, and Seven Concurrency Models in Seven Weeks Vs. CUDA by Example. These were all good, but the one that was most fun for me was easily Game Engine Black Book [Wolfenstien 3D Vs. Doom]. Reading these books was a blast, and writing down my thoughts about them was just as fun and satisfying. I'm surprised it didn't gain more traction, but I'm pretty much done trying to figure out which posts are going to take off and which ones will fly under the radar of the Internet.

For the coming year, I'm planning on keeping up the same cadence, which means 18 more posts. That's really 18 posts, too. I checked. I didn't get to that exciting blog series I alluded to last year because the schedule was filled up with reviews, but I'm intending to start in on it right away this year. The book review posts will be much reduced as well. I've only got about a dozen programming books on my list that I'd still like to read, and I'll probably hold off on them while I work on this other project.

Technical Books

I really dug into the technical books this past year, even more than the previous year, and I just met my goal of 22 books (plus 2 pop physics books) while working through most of my tech book backlog. As I had hoped, most of these books were quite good. A fair number of them even made it onto my read-again list. There were only a few duds and one stinker. Here's a run-down of them, roughly ranked in order of preference and linked to the longer Tech Book Face Off reviews.

The Good
  • Game Engine Black Book: Wolfenstein 3D - Between the high level of nostalgia and the fascinating topic, there was no way this book wasn't going to top this list. It's an incredibly well-done guide to how Wolfenstein 3D was made.
  • Game Engine Black Book: Doom - Arguably, this book is even better than the Wolf3D one, but you should really read that one first so this one comes second. I highly recommend them both for anyone curious about how these legendary games were done on such feeble hardware.
  • Rails AntiPatterns - I loved the tactic this book took of showing bad Rails code, explaining why it's bad, and then showing how to fix it. Some books do this sporadically without telling you in advance, but this worked so much better, knowing that each example was intentionally bad from the start so there was no confusion about what was the right way to do things.
  • Data Smart - This was the most fun I've had reading a book on Excel spreadsheets. Not that I read many books on spreadsheets, but if I did this would definitely be the best. It's about implementing data science algorithms in Excel with humor, and it's so much better than it sounds.
  • Don't Make Me Think Revisited - I enjoyed the first book, and the revised edition is just as good. Learn all about how to design user interfaces that make sense, and have a great time doing it.
  • Structure and Interpretation of Computer Programs - A classic that still holds up today for teaching the fundamentals of programming and much more, this book has a steep learning curve, but the rewards match the effort it takes to get through it.
  • The Hidden Reality - This was a super fun and mind-expanding read, taking us through the numerous types of multiverse concepts that have been thought up by cosmologists. Brian Greene continues his excellent, approachable writing style with this enjoyable book.
  • Parallel Worlds - Michio Kaku does his own tour of the different types of multiverses we can conceive of, with a few more fantastical stories thrown in for good measure. This is another great book to read to get the high-level overview of this topic.
  • Facts and Fallacies of Software Engineering - You don't have to agree with everything in a book for it to be excellent, and that's the case here with Robert L. Glass' thought-provoking arguments about the software engineering industry. Still relevant after 17 years.
  • Professional CUDA C Programming - If you're interested in GPU programming and want to play around with your nVidia graphics card, this book has all the information you need to get started in a nicely written, diagrammed, and organized guide.
  • Python Machine Learning - It's a solid introductory text on the fundamental machine learning algorithms, both in how they work mathematically, how they're implemented in Python, and how to use them in scikit-learn and TensorFlow.
  • Data Science From Scratch - Fundamentals are so important to learning a topic well, and this book does a great job of teaching the fundamentals of data science by implementing the algorithms from scratch in Python.
  • Seven Concurrency Models in Seven Weeks - I've loved every 7-in-7 Weeks book that I've read, and this one is no exception. It's an entertaining read through seven different ways to do concurrent programming with today's technology.
  • The Non-Designer's Design Book - Learn how to design boldly in text and graphics with a few simple rules and clear, straightforward guidelines. Anyone and everyone who works around websites should give this quick read a look.
  • Getting Clojure - If you're looking for a fun read and a tour of the Clojure programming language, this is the book to pick up.
  • Effective Python - Every programming language has its beyond-the-beginner-level book on how to write programs in that language well, and this is the one to read for Python.
  • Programming Elixir ≥ 1.6 - An excellent book for learning the ins and outs of this highly concurrent, fault-tolerant language, and it's well worth a read if you're operating in that domain.
  • Metaprogramming Elixir - This book fills in the few gaps in Programming Elixir ≥ 1.6, and it's a great companion to that book.
  • Programming Pearls 2 - This is a fairly decent algorithms book that's worth a read as a casual second or third book on programming algorithms.
The Not-So-Good
  • CUDA by Example - This book is clearly written, but not especially well-written. Still, it's a good introduction to CUDA programming that covers the basics. Just don't feel compelled to read it all the way through, as the later chapters are fairly useless.
  • Learn Functional Programming With Elixir - Neither thorough on Elixir nor especially focused on teaching the unique aspects of functional programming, this book left a lot to be desired. It's fine, but not great in any respect.
  • Programming Massively Parallel Processors - For a subject that is inherently interesting to me, this book managed to be tedious, verbose, and opaque in its explanations, and way, way, way too long. The necessary information is in there, but it's not worth the effort when there are better options available.
  • The Rails 5 Way - This book was so much longer than it had to be. It was light on discussion and super heavy on documentation, as if it was simply a transcription of the online documentation into a book.
The Suck
  • How to Design Programs - Nearly 750 pages of the most tedious, drawn-out, agonizing explanations about learning to program, I disagree with the title given to this book. Nowhere in it does the reader learn how to design programs, maybe design of functions at best.
This showing is much better than last year, with a half-dozen more good books, and less bad books. It was actually quite hard to rank the good section beyond the first few because they were all well-written and engaging. I don't know if I was better at selecting good books to read, or if I just got lucky, but I was pleased with the high level of quality in this year's book list.

Novels

As planned, I read even more technical books this year than last, but I still managed to read some great novels in the past year. Partly, this is because of listening to audiobooks in the car, and I have a 30 minute commute to fill. The number of books I got through was still less, but some of them were much longer than what I read the previous year. Again, they're roughly ranked.
  • The Way of Kings, Words of Radiance, Oathbringer - Wow. Just WOW. I could not believe how wonderful these books are. The characters are all flawed and broken and so human, the story drags you along as you watch in amazement at how everything develops, and the world that Brandon Sanderson built in this Stormlight Archive series is simply incredible. It has weight. It has life. It has history. I can't wait for the next book to come out.
  • The Fifth Season, The Obelisk Gate, The Stone Sky - This trilogy is just as awesome as the Stormlight Archive series, and I was constantly amazed at how clearly written the world of the Stillness is. The fantastical powers that the orogenes and Guardians have could be confusing, but N. K. Jemisin writes so simply and beautifully that everything was crystal clear in my mind as I read it. The story is at the same time one of the most engrossing tales I've ever read and a powerful allegory about the struggles of racism in society. It's enlightening and revealing without being accusatory. Beautifully done.
  • The Golden Compass, The Subtle Knife, The Amber Spyglass - Throughout this trilogy I was continually surprised by the incredible imagination of Philip Pullman. Each book brings entirely unique new elements into an already rich and diverse world, or rather many-worlds. Even with all of these new elements being introduced, the world always felt cohesive and real. Everything made sense within the context of the story. This is a hard thing to do right, and Pullman did it masterfully.
  • The Eye of the World - I'm just getting started in this long Wheel of Time series, and I'm already hooked. The first book is essentially one long, thrilling chase through a world of mystery and magic. The reality of the world is revealed slowly, and the suspense of wondering when you'll find out that next tidbit of knowledge about the world was gripping. By the end I have more questions than answers, and I'm ready to learn more about the Wheel of Time.
  • Snow Crash - This book was ridiculously fun, plain and simple. The setup makes no sense at all and the story doesn't care one whit about anything, but it doesn't matter. You're a pizza delivery boy in the future who also happens to be the world's best samurai swordsman and an elite haxxor. You get mixed up in some crazy shit and lots of weird stuff happens. It's a wild ride, and you're just going to have to read the book to see how it all works out.
  • Jurassic Park - It's a book about man recreating dinosaurs in the modern age. What could go wrong? And what's not to like? This book is basically a classic at this point, and great fun to read.
  • Ringworld - While the premise of this book was interesting—humans and aliens go visit an enormous world built in a ring around the aliens' host star—I just couldn't get into this book by Larry Niven. The story was only tangentially about the ringworld, and the main focus was actually about whether people could be bred for luck. It seemed like Niven wanted to write about building a ringworld, but couldn't figure out how to write a compelling story around that so he had to also write about this other thing to justify it. Also, his writing was too disjointed for my tastes. Scenes changed so abruptly and dialog and narration was so terse that I had trouble understanding what was going on most of the time. That was a huge disappointment, especially considering the other books on this list.
  • The Color of Magic - This book was another disappointment, but for a different reason than Ringworld. The writing was fine, even funny sometimes, but the discworld made no sense at all. Completely random and nonsensical things would happen to the main characters at every turn, and I never could figure out what the plot was about. It didn't take long to lose interest in the characters altogether, since whatever happened to them wouldn't make any sense whatsoever and they were probably going to end up fine anyway. There were a lot of similarities in style to The Hitchhiker's Guide to the Galaxy, and while similar elements somehow worked there, they fell totally flat in The Color of Magic. That leaves me with no reason to read the other 40 books in the series, lucky me.
One of my goals here was to branch out and read new authors, and I mostly held to that goal. There's no Stephen King, Neil Gaiman, or Dragonlance books on the list, but I did read another book by Neal Stephenson after Seveneves and was not disappointed. The first eleven books were extremely hard to rank. They're all basically equivalent levels of awesome in my mind, and you absolutely should go read them if you haven't already. The stories are incredible, and the worlds these authors imagined and built are even more incredible. 

I also reread Jurassic Park, from my youth, by way of introducing it to my daughter, who absolutely loves dinosaurs. It was well received. For this year, I already know I'll be rereading The Lost World with her. I'll also be continuing The Wheel of Time saga, and starting another new author for me, Ursula K. Le Guin, with A Wizard of Earthsea. Other than that, I'm thinking of finishing up the Foundation series by Isaac Asimov and reading a few more new authors. All I know is there are a lot more worlds to explore.

Video Games & Movies

I actually have not watched many movies this year. It didn't seem like there were too many worth watching. I did see Avengers: Endgame, of course, and it was probably one of the best movies I've ever seen, considering the vast context and buildup of the rest of the MCU. I also finally saw Captain Marvel (I wait until I can get movies from the library), and that was pretty good, too. 

One of the more unique movies that I did end up watching was Annihilation. I happened to get it when I was by myself in the house one night, and I popped it in the PS4, turned off the lights, and turned the sound way up. That was an intense, wonderfully creepy experience. Do you know how great the sound effects are in that movie? And that freaking bear, holy crap. I'm surprised I got any sleep that night. 

I also rewatched The Lord of the Rings with my wife. Those movies hold up really well. If the movie drought continues, I've got a growing list of other (not-so) old movies to watch again, like Jurassic Park.

As for video games, I'm still enjoying the LEGO videogames with the kids. We finished up Jurassic Park (are you seeing a theme here?), The Hobbit (much better than the movies), and most of Marvel Super Heroes. We're still working on The LEGO Movie, Batman 3: Beyond Gotham, and LEGO City: Undercover (this game is ginormous). Then we've started Marvel Super Heroes 2, Marvel's Avengers, and we just got another batch of LEGO games for Christmas. I don't know why, but I don't ever seem to get tired of these games. It's gotta be the character development. (I'm kidding; it's the graphics.)

For myself, I ended up playing Lightning Returns: Final Fantasy XIII and God of War III. These are two very different games, and yes, they're both older than dirt. I said last year my backlog was deep. I know Final Fantasy XIII got a lot of criticism, but I still enjoyed the whole trilogy. I especially liked Lightning Returns for the new battle system. Gone are the menus and inventory lists, and instead you link four different actions to each of three different outfits to set up your available commands for a battle. You have a few other special actions that you can do, and then you're choosing actions in real time during battles. It's a much more dynamic, exciting battle mechanic than selecting actions from menus, and like most Final Fantasy mechanics, surprisingly deep. It really made the game for me. Lord knows the plot didn't.

God of War III was another installment of hack-n-slash, vengeance-upon-the-gods action game that was pure entertainment. I was reminded of how perfectly responsive the controls are in these games, and I think the most fun to be had was beating the crap out of Hercules.

The Year Ahead

I have more than enough games to play this year as I play through my backlog. I actually got more new games than I finished, so that backlog is just getting deeper. If only there was more time. I won't be reading as many technical books, so there's that, but I'll probably fill a lot of that time with more novels and the next blog project. Still, maybe I can squeeze in a couple more games, and I haven't picked up the guitar again, yet.

AZ 030, The Activision Decathlon!

Advertisement
Welcome back to the show! I hope you all enjoyed the holidays, now we're back to playing Atari 2600 games every two weeks until I screw something up. The first game of 2020 is the Activision Decathlon by the amazing David Crane. I hope you enjoy the show. Next up will be Moon Patrol by Atari, so if you have any feedback on that game, please send it to 2600gamebygame@gmail.com by the end of the day 26th January. Thanks so much for listening!

Brand new Discord server! Why
Decathlon on Random Terrain
David Crane article by Tony Tyler, Big K magazine April 1984
David Crane article by Colin Calvert, Hi-Res magazine January 1984
From the Digital Press Activision Patch page:
Decathlon Bronze patch
Letter with Bronze patch
Decathlon Silver patch
Letter with Silver patch
Decathlon Gold patch
Letter with Gold patch
Atari Age Decathlon with Driving controller thread
Atari Age Decathlon Training Suit thread
Decathlon glove on Atarimania
Bugler's Dream by Leo Arnaud

Copyright © 2009 - - Kiamat | Coin Free Faucet Claim | Firebug Theme by Blog Oh! Blog | Converted to Blogger Template by ThemeLib.com | Jasa Promosi Online - Tukar Link Gratis