Planetside 2

2014-09-12_00004Recently I gave Planetside 2 another try , motivated by this RPS post. I didn’t write about it the first time I played, but broadly: I found it immensely interesting, but deeply flawed. Had it changed in the intervening years? It must have, if it motivated Mr. Rossignol to write such superlatives about it.

However, despite the hours I sunk into it this week, the game simply did not stick. I shall attempt to articulate why.

Read more...

Getting the CPU time of a process in Bash is difficult

Getting CPU time of a running process turns out to be not-so-easy. You’d think there’d just be a utility you can run - Fetch me the elapsed CPU time of this process! - and… well, okay, there actually is. It’s called ps. You run ps h -o time -C PROC_NAME , and sum them up in your bash script, and all is fine and dandy, until your boss comes over and asks you why all your CPU times are in seconds, and could you please make it more precise.

Read more...

Creating datasets on z/OS for Newbies

wat As a person who works almost exclusively on Linux, it’s hard for me to understand z/OS. It all just seems so… inelegant. That being said, though, I’m very much a newcomer to mainframe systems, and I’m probably overlooking a thousand and one things that make it better than systems I’m used to. In any case, it’s being used in a lot of places, so it’s not going anywhere anytime soon. Since IHS - the subject of my job - is ported to z/OS, I need to know at least a little bit about working on the OS. I embarked on this journey last week.

The specific issue I worked on was in our code for generating a webpage listing the members of a PDS, a partitioned data set. For those not in the know, that’s basically the equivalent of a directory; a PDS holds several data sets, basically files. I don’t fully appreciate the difference between a PDS and a directory, or a sequential dataset and a file; to me, they are quite similar. Figuring out how to work with them is a bit trickier.

Read more...

Transistor and Bastion: A Review

Transistor

Let me lay this down now; Bastion is my favorite game of all time. When Transistor was released, I could not stop myself from buying and playing it that day. Immediately, I could feel the similarity to Bastion. You hear echoes of it in the empty streets, feel the very same texture in the skein of its story. It’s even got the same evocative narrator, for goodness sake. If I were never to have known that Transistor was made by Supergiant, I could have guessed minutes after starting it. And yet, nearing the end of Transistor, I was asking myself:

Could this possibly be by the same people?

It was not a pleasant surprise.

Before I go on further, I should mention that this is not a typical review. I started out with the intention to write one, but to be honest, I cannot. There will, no doubt, be people who think Transistor should be judged by its own merits, not by how it compares to its predecessor. The problem with this is twofold. First, there were my expectations going in. Reviews cannot be purely objective, and I love Bastion. It is possible that I will be thinking about its story and listening to its soundtrack until the day I die. It was inevitable that I would compare Transistor to Bastion. Second, as I’ve mentioned above, the game is absolutely the child of Bastion. It is clear that Supergiant meant for this game to be a followup, so it is impossible to avoid a comparison.

Most of this is me analyzing why I was disappointed with the game. If you’d like a more overall review of the game, there are plenty of them on other sites. On the other hand, If you are wondering why the end of the game felt a little less good than it should have, read on. Major spoilers and nitpicking ahead for both games. You’ve been warned. If you haven’t played through either Bastion or Transistor, please do that first. Both games are much better when taken without preconceptions.

Read more...

Markdown Viewer

I’ve started taking notes at work; there’s a lot of processes to keep in mind. Markdown seemed a simple way to do it. However, I didn’t feel like installing yet another editor specifically for viewing Markdown - why not just use vim, and have a viewer that updates automatically as the file is edited?

After searching around, I found a pretty neat node.js app someone had written. However, it didn’t compile under the latest version of Express; it didn’t take long to fix that up, due to the excellent migration guide they have.

The stylesheet provided with the app grates a little bit, but it works perfectly and is exactly what I was looking for. Get my updated version here.

Receiver

2014-03-15_00010

So many people have already covered Receiver that I don’t think there’s anything else I can add to the discussion; I’d just end up repeating most of what people have already said. Don’t get me wrong; the game is amazing in its own way, and there are a lot of things to write about, but a lot of people have written about it. However, I do want to share a snippet - a microcosm, really - of this game that I just started playing yesterday. If you’re not familiar with Receiver, you can go watch this video and come back.

Ready? Okay.

Read more...

Abstraction and Embedded Languages

Embedding a language, and doing so productively, is one of my goals for Project Z. However, before writing a more technical post on how I’m using it, I wanted to explore just why using an embedded language seems, in theory, like a good idea. I certainly have been feeling a great deal of power, and I’m just starting on this path.

Put simply, embedding a language just means running code inside your code. You’ve got some code written in one language, and you’ve got some code written in another language. The first code runs the second code inside itself. This is not the same as the first program forking and calling another program. Some part of the first code is actually interpreting and actively running the second code. Pretty much any language can be embedded; you could embed Java into C, if you wanted to (don’t). In general, languages you’d want to embed share some properties. They’re dynamically typed. They’re lightweight. They are interpreted, or at least run under a VM.

This sounds pretty boring so far; why would you ever want to do this? These are sometimes nice properties for a language to have, but taken by themselves, they don’t really make you say “huh, that’s cool, I should use this language”. They are all means to an end, and that end is abstraction. Yes, that’s right, that old buzzword from your CS classes. It gets thrown around a lot, without too much explanation as to why it’s a good thing. To explain abstraction, let me step away from programming for a bit and offer this example.

Read more...

Sunset Over the Ashlands

Dual-monitor Morrowind Wallpaper

Occasionally I get in a creative mood; today was one of those days. Walking out of Ald Ruhn for what must have been the hundredth time, I was just… struck. The result is a dual-monitor Morrowind wallpaper. The only mod used: MGE. That’s it. It’s very nearly stock Morrowind, except for some small touchups I did to hide obvious texture seams. Hugin was used to stitch the panorama.

Morrowind is a great game - and that’s not nostalgia speaking, I never played it for real until several years ago. I doubt I could do it justice with a writeup, but maybe someday I’ll try.

Project Z: Static Initialization Order

Project Z probably marks the first time I’ve felt that it’s okay to use singleton objects. It feels quite liberating to be able to do this; when is there ever going to be more than one Client, or more than one PhysicsManager, or more than one Console? Generally, never, so you don’t want to have to worry about the case when it might happen. There’s other benefits, too; generally, it’s very hard to bind nonstatic member callbacks to function pointers. Static functions make it infinitely easier.

However, static members come with an insidious bug. I first encountered it trying to debug a Sqrat problem within their library itself. It’s been explained in fair detail here, but the way I’m using these static members together presents the problem in a fashion which is even more tricky to think about.

Read more...

Akismet Ate my Comments

I was wandering around the Wordpress admin interface, looking for things to improve, when I happened upon the Akismet stats page. It happily told me that it had caught hundreds of spam comments, along with some amount of ham.

Well, that’s weird, I thought. What the heck is ham? The page explained to me that ham is just normal comments. Oh that’s great, I have comments on my site! Except… I don’t actually have any comments. None of them. The comments page in the admin interface lists 0 comments, and there are near-none on any of my posts or pages.

I went on a hunt for why this is, and found several places describing how Akismet either treats normal comments as spam or eats other comments. Long story short, I removed the plugin from my wordpress install a few days ago to test things out. Lo and behold, a comment appeared on my site a day later.

I can’t say for sure if it was just coincidence or not. In any case, I was not inundated by spam in any way after I removed Akismet, so it doesn’t seem like there was any downside. Just in case, I’ve installed a simple checkbox plugin that I’ve seen work fairly well on other sites. I’ve also got some math captcha plugin that I put in ages ago.

Seems like I should be fine, and I’m getting comments again. Finally, I can realize my dream of getting flayed by blog commenters.