July 9, 2016

Back In 1995 - Review In Pictures

It's Silent Hill, only terrible!



Some things have to be seen to be believed, and Back In 1995, the latest game to try and exploit nostalgia to sell a shoddy piece of shit recapture the atmosphere of old-school horror games - most notably, Silent Hill - is one of those things. I could go on and on about everything that the game does wrong and everything the developers misunderstand about the appeal of the games they're trying to ape, and to some extent I will, but trying to offer a reasoned analysis of Back In 1995 seems like trying to do an autopsy on a Lovecraftian being: a sure recipe for insanity and mad ramblings.


So this time around, I decided to go for something a little different and just show you some of the highlights from the game. As such, be wary that unlike most reviews, this one is very spoiler heavy. And while this game is certainly in running for worst game I've played all year, I... kinda recommend it, actually. It's not cheap, especially for what it is, but if you have 12$ and two hours of your life to burn, it is one of the most uniquely bad gaming experiences you'll have in life. Ideally, I'd picture people playing this and then coming back to this review so we could all laugh about it together, like you would do with The Room or any other movie of that caliber. If you just want a sample of the wrongness that is Back In 1995, though - please proceed.

Also, since I feel like this might come off as nit-picking, I would like to stress that this is all I'm giving you here - a sample. The entire game is nothing short of a disaster, and it had me with my jaw open the entire time barely managing to wrap my head around the last stupid thing that happened just as another stupid thing came to take its place. I was honestly holding back, and I still had my finger on the screenshot key for almost my entire playthrough.

Having said all that, let's get right into this shit. Literally.


The turd monsters were the first thing people noticed about Back In 1995's trailer, and the most obvious sign that there was no hope for this game. Of course, a good horror game relies mostly on atmosphere and a feeling of uncertainty to inspire dread in the player, but it's rare for survival-horror to work without a tangible threat that could be lurking around every corner. Once you realize your main baddie in the game is the most laughable thing you could possibly be fighting, it's hard to maintain any fear or suspense. Especially when you realize said baddie can be stun locked and killed in three melee strikes, and that, incredibly, you can sometimes kill it by hitting it through the goddamn wall.


Brilliant.

To say the game is badly written is a massive understatement. As you will see below, it's not a language issue, because the developer is capable of expressing himself in English quite competently. It just seems like everything about the game and the setting has been an afterthought.


Yes, I'd imagine having a key to a door would help you open it.


I communicate with my co-workers this way all the time. But hey, at least it's better than the puzzle where you have a 3-digit padlock and you need to figure out the combination and uh... oh.


That's not the only time the game treats like an idiot, either.


An item in a video game that needs to be... used? You have to use it... somewhere? 

Mind. Blown.

Very often, it seems like the developer didn't even bother to make sure that the text actually describes what is shown on screen. Quality assurance? What's that?


Actually, that's... on the chair.


Nope, that's just a hole in the floor. Pretty sure you could jump right past it, too.


I have no words.

After going through a few rooms, you find the other main enemy in the game - a weird pink bird-looking monster. 


This one takes all of four melee hits to go down, and is stun-locked just as easily. In fact, the only monster that can't be stun-locked with melee is the third and final monster, which serves as a boss of sorts, and which - embarrassingly - actually managed to startle me, mostly due to having a semi-competent reveal in the midst of a lot of dumb shit. 


However, that effective moment is wasted as soon as the cutscene ends and the monster starts... walking in the opposite direction from you.


This thing has absolutely no interest in me.

Almost every narrative-based game has to force you to visit specific locations in a certain order to get the effect the developer was aiming for, but few games are as transparent about it as Back In 1995. At one point in the game, a character called GP sends you to retrieve some documents for him, at which point you get the following dialogue:


What... you gave me back the documents? Why didn't you just tell me to take the documents to the other building in the first place, you ass? 

When you do get to the next building, you're supposed to be startled by a guy calling out to you, which would have been far more effective if you couldn't just... see him on the roof right there well before it happens.


Of course, if you try to take the documents to the next building without going back to GP, you get this message:


Whoa whoa, relax, player. This isn't a world we've built for you to explore and interact with. You do what we tell you, when we tell you. This is a game where a door you need to go through remains locked until you read all the data logs lying around - which are, as we all know, the best story-telling device you can have in a video game.


Insultingly, this game actually forces you to wait a few seconds before you can skip a page of text, as if it's really important that you read through its sad attempt at a story.

It's become all too common for developers to have this strange pride in their work that is in no way reflected in actual game design or technical attention to detail. I don't expect ground-breaking visuals from indie games, but you can often see the love and effort poured into the better ones. Then there's Back In 1995, which takes forever to change camera angels even when you move through an entire area where you can't see your character:


Or this actual camera angle from the game:


Or this door that you can only open if you're not right next to it:


But hey, at least there aren't really obvious bugs, like clipping through large objects in a very limited space, right?


Awesome.

But is there any merit to that story that the game is so desperate to tell you? You may be surprised to find out that no, not really. It's extremely predictable, and it doesn't help that very early on, you come across this painting marked as being from 2013:


Gee I wonder if there will be a twist where we find out it's not 1995


Well who could see that coming? But it's all building to a really important point, people:


SYMBOLISM!!!11

After a fake ending, the game returns you to the first area, where you find a flashlight that, once turned on, causes all the lights in the game to go out. It's another surprisingly powerful moment, threatened and scared than anything in the game leading up to it.


At least it would be, if the game didn't crash after the fake ending, and if a bug didn't prevent the lights from going out at the right moment. Again, the game wants to ape the great survival-horror titles of the 90s, but without the willingness to put in the hard work they did to make their brilliance shine through despite their technical limitations. 

As a result, nothing about Back In 1995 feels genuine. As the developer himself says in the post-ending commentary that ensues:


And that could be said about practically anything in Back In 1995: it's all a gimmick. Resident Evil had turret controls because the first PlayStation didn't have dual analog sticks. Silent Hill had fog because the PlayStation wasn't powerful enough to render the large environments Team Silent wanted to use. Why does Back In 1995 do anything that it does? Just because. Just to make you think of the old horror games you liked, in the hopes that maybe you'd like it by-proxy.

In fact, this seems almost conscious:


As far as the developer is concerned, Back In 1995 isn't supposed to be a piece of art or even entertainment. It's pure escapism, without merit in and of itself. But that's not what its inspirations were. People are still playing RE and SH to this day, but the vapid power fantasies of yesteryear have long been forgotten by all but the very nostalgic, just like the vapid power fantasies churned out today by the likes of Ubisoft and modern Square-Enix are destined to be. Escapism is shallow; media that invokes something genuine in the audience is timeless.

The developer goes on to express concern about the way games today are made and consumed. To me, this is the most troubling part of the commentary. Yes, there's a lot of garbage coming out nowadays. But as far as I'm concerned, we're living in a golden age of gaming - a time where there are more games appealing to more people than ever before. The gatekeeping, privileged attitude that games are being destroyed because they are not exactly like what they were in the 1990s has led to some pretty terrible stuff over the last few years, and Back In 1995 has hardly earned the right to claim to represent a superior attitude to gaming.

But the developer still seems satisfied:


Fair enough. If the developer's job was to make me thing about games old and new, he certainly succeeded.

I'd think that a game developer's job is to make good games.

But what do I know, right?


Ugh, I should've known DarkSydePhil had something to do with this.

Score Calculation: Well, it has two good moments, so that's a

Final Score: 2/10

Verdict: Turret controls, polygon graphics, clunky melee - I already left you, and you're better off left behind. I mean, If we're already doing out-of-context 90s references...

June 12, 2016

New Song - Besofo Shel Davar (In the End)

I'm a big fan of blues, and even though it's not my usual style, I have a lot of fun with putting lots of bluesy touches in my metal. Besofo Shel Davar is the bluesiest I've ever gotten, and is one of my shortest and simplest song, and yet I love this one. It's very straightforward and it kicks plenty of ass as a result. Check it out!



Also, this song is in Hebrew. Yes I am Israeli, but I assure you, I'm one of the good ones. 

May 31, 2016

How Doom and Overwatch Avoid the Mortal Sins of Modern Shooters



As someone whose first console since the Nintendo 64 days was a Wii U, playing a military shooter for the first time was a jarring experience. The last FPS experiences I had before a decade-or-so of nothing but PS1 games and SNES emulators totally owning that system were Half-Life and Deus Ex, games which introduced such advanced concepts as 3D graphics and looking up and down with your mouse (previously achieved in the more cutting edge games with Page Up / Down). Imagine my surprise when I first played Killzone 2 and discovered that there are no health packs, no secret rooms, and that weapons I picked up before kept disappearing, leaving me with nothing but a lame pistol as an alternative to whatever gun I had equipped.

With time, I learned to love modern shooters and forgive their limitations. Killzone: Shadow Fall is one of my favorite multiplayer games, and I have the 300+ hours in Team Deathmatch to prove it. The problem is that for a long time, the grey, "realistic" military shooter was the only show in town, and there was no way to scratch that old-school itch without actually going back to the old games.

But the last month has been good to us. Not only have Doom and Overwatch turned out to be fantastic games, they're also the first games in a long time that have captured that classic shooter feeling, and in the process, done away with some of the most tired tropes that have been plaguing the genre for over a decade.



Regenerating health as a great way to kill the intensity of combat

Of course, just because a game mechanic is older or more obtuse doesn't make it good. Nobody wants to go back to the days where you had to remember to drink water in RPGs, and healing up in an FPS isn't much better: at best, tracking down medkits after combat is busywork, and at worst, hitting a checkpoint* after a battle gone poorly could force you to start the whole level over. Having your character auto-heal when you're not getting damaged seems like a natural way to streamline the process, which is always a good thing - complaints about "casualization" notwithstanding.

But the problem with regenerating health isn't so much about what happens after a fight as it is about what happens during the fight. Regenerating health encourages a play-it-safe attitude, cowering in a corner, popping out of cover for a moment to take down an enemy, going back after soaking up some damage, and so on ad nauseam.

For a squad-based cover shooter like Mass Effect, that slow, methodical approach works well, especially when the squad mechanics allow some variety by giving you the option of flanking an enemy or using special abilities. In a solo FPS, though, it kills the tension dead, as you do little more than wait for enemies to pop their heads out of cover in what is essentially glorified whack-a-mole. This is to say nothing of multiplayer, where taking away the need to gather supplies is a boon to the campers. Goddamn snipers.

Much like its classic namesake, Doom encourages you to move around by sending horde after horde of enemies at you, with precious health pickups spread throughout the level. But the latest entry in the franchise takes that dynamic to a new level: causing enough damage to a demon without killing it will cause it to flash blue and yellow, indicating that it is stunned and susceptible to a "Glory Kill", which involves the player character killing the demon with his bare hands in some unspeakable way, like the jawbreaker move, which I assure you is quite literal. Glory-Killing a demon greatly increases the chance that it will drop health and, later on, armor.

Open up wide, I'm comin' inside!

This adds another layer of depth to combat, as deliberately leaving certain enemies unharmed and taking it easy when attacking them is a vital way of keeping your health up. If at first your instinct when seeing a group of enemies is to take down the weaker, faster enemies from afar, you quickly learn that keeping them around is a reliable way of keeping your health - an advantage that will have to be weighed against the problem of having more enemies to deal with.

In Overwatch, on the other hand, health recovery is intimately bound with the game's squad-based mechanics. Some heroes can regenerate or self-heal, but save for those who are specifically supposed to be self-sufficient combatants like Reaper or Soldier 76, your front line fighters depend heavily on having a healer around. This means that doing well in combat is the result of a good team working together, not of a mostly disparate group of fighters each getting a bunch of kills.

I mean, if you keep healing your Reinhardt, that bastard is never going down.

The heavy

Some shooters understand that regenerating health encourages players to rely on cover, and have devised a particularly lazy way of forcing players to move around: the heavy. You know the one: the one that's introduced in a cutscene that seems a bit too dramatic when you consider that what you're faced with is a slow-moving opponent in body armor, who keeps blasting its shotgun regardless of whether or not you're actually in the line of fire, seemingly bored with its own existence. The heavy is too slow and stupid to be a threat in any one-on-one situation, but its high damage output at close range means that it can easily force you out of cover, making it very dangerous when covered by long-range fighters.

Possibly the most egregious use of the heavy is in Wolfenstein: The New Order, otherwise one of the best shooters to come out in recent years, but also one that had you fight a heavy that you couldn't see coming from your cover, while you're already facing a room full of Nazis. While he's almost guaranteed to kill you the first time around, its path is easy to anticipate, so taking it down is just a matter of pumping him full of bullets once he shows up. It's the worst type of enemy: impossible to deal with when you don't know it's there, and trivial when you do.


It can be argued that the Possessed Security in Doom is a heavy. Even in Overwatch, it's possible to get a heavy-style attack by having Reinhardt team up with Reaper. But there's a very important difference: neither Doom nor Overwatch expect you to keep to cover, and between your movement options and the special abilities that can help deal with them, these apparent heavies no longer feel cheap or annoying - they're just another type of enemy you need to learn how to deal with.

Besides, I uh... feel pretty confident about this one.


We actually don't need five slightly different types of machine guns

When I was a kid playing Doom II, I never knew the names of any of the weapons, but I never had a problem remembering what each one did: there was the spinning one with the really fast fire rate, the brown tube that fired sparkly blue stuff, the old-computer looking thing that shot green orbs that killed everything - hell, even the basic weapons are memorable, because they had a clear design and purpose, and remembering the weapons also helped you remember that other tool you had in your belt.

Meanwhile, when I try to think about the weapons I used in, say, Bioshock Infinite, I can vaguely remember there being a machine gun, a slightly faster machine gun, a slightly slower but slightly beefier machine gun, that Vox Populi one that didn't seem to do anything, and for originality's sake - some standard variations on shotguns, sniper rifles and the like. I doubt I could tell a Carbine from a Repeater if my life depended on it. In fact, I remember looking at videos of Killzone: Shadow Fall, CoD: Ghosts and Battlefield 4 and finding it hard to even tell which weapon belonged to which game.



Doom had an easier time with getting an impressive arsenal, given that it had such a strong legacy to rely on. But Overwatch is extraordinary not only in the weapon design, but in the innovative ways weapons are assigned to heroes.

Reaper is the best example of this. He could have been designed just like the the spy or scout from any multiplayer shooter: a weak fighter who can cloak or disguise to sneak up on enemies and stab them, armed with a sniper rifle for long range combat or a dinky gun for emergencies only. Instead, Reaper's sneak attack potential is due to his ability to zip across large distances in the map. When eh does attack, it's probably the least stealthy thing in the game: his twin shotguns are incredibly loud, and his ultimate moves involves him spinning around shouting "DIE! DIE!" as he shoots in all directions.

And hey, they listened!

It sounds like a terrible idea for a hero that's supposed to be sneaky, but the lack of any silent takedown is more than made up for by his ability to soak up health from dead enemies and to become invulnerable for a short period of time. This ingenious setup doesn't just make Reaper feel fresh, but does something which would've seemed impossible otherwise: it made the shotgun interesting again.

And most important of all: the two weapon limit

Really, do I even have to say any more? These are shooters. We want to be shooting things. There's no reason to take away the cool new weapon I picked up just because I need a machine gun for a minute.

Here I should mention The New Order again, but this time as a positive. This is the game that asked the question: what's the opposite of a 2-weapon limit? Why, letting you carry 2 of every weapon, of course! Wanna run around shooting two handguns, Max Payne style? You got it. Wanna use twin rocket launchers to take down massive robots? Go right ahead. Wanna use two sniper rifles simultaneously? Why the hell not! It's a great mechanism that allows you to balance between accuracy and damage as needed, and it comes in handy when facing the beefier enemies.



While sadly, neither Doom nor Overwatch have adopted universal double-wielding, the wide array of weapons and abilities available to you at any given time is a blessed rejection of what is possibly the most inexplicably popular FPS mechanic since the turret section.

Let video games by video games

There's much more that Doom and Overwatch bring back from the good old days: colorful environments, enemy variety, bosses - the list goes on. But most importantly, what they bring back is the understanding that a game can have a plot and even be serious about some things while still being silly and over-the-top. We don't have to be morose and brooding all the time - we can actually, you know. Have some fun.

Of course, there's every risk now of an equally cynical trend of overly cute and bright games starting instead - but we'll cross that bridge when we get to it. In the mean time, I leave with one of the more beautiful moments of the new Doom:



*Of course, this mostly a problem due to the existence of checkpoints - but we'll deal with that one another time.

April 24, 2016

1979 Revolution: Black Friday Review



Banalities are never in short supply when one tries to discuss the popular uprisings of the past: "revolutions devour their own children", "violence begets violence", "absolute power corrupts absolutely" - such platitudes are often all people feel the need to say about events that have had enough books written about them to fill up a library. When they take place in a Middle-Eastern country, the racist idea that Muslims, left to their own devices, can only replace a pro-Western dictatorial regime with an even worse, Islamic regime, is all the more tempting to those whose understanding of the region has been heavily colored by post-9/11 Islamophobia.

This is the attitude many people take towards the 1979 Iranian Revolution, but no one was quite so blase about it when it was taking place, and for a good reason. The revolution signaled the last days of the Baghdad Pact, and was taking place at the same time as the Muslim Brotherhood uprising in Syria, The Soviet-Afghani war, the Lebanese civil war and Israeli invasion of the country* - all over Asia and beyond it, the status-quo established in the decades after WWII was threatened, and both the West and the Soviet bloc were intervening aggressively in an attempt to keep their client regimes in place. The Iranian Shah wasn't just a reliable supplier of oil - he was a symbol of stability in a sea of uprisings. His regime's demise was a political defeat as much as it was an economic one, and its reverberations can be felt to this day.




With such heavy subject matter to tackle, 1979 Revolution: Black Friday's triumph in interactive storytelling is all the more significant. By having the player character take an active role in the revolution as well as exposing players to its social, cultural and political backdrop, it can be said with no hyperbole that it has won an important place in video game history.

The story is told from the perspective of Reza Shirazi, a photographer who came back to the country after studying in Germany. After some obligatory cliches - Reza says that he is just there to take photos, and is of course told that he will eventually have to pick a side, even though that never actually happens - and some rather cringe-inducing references to his friend's "legendary disco moves", we are given the opportunity to take photos of the revolutionary crowds. Taking pictures is an important part of the game, both as an immersion device as well as a way to teach us about the revolution - each picture taken offers the possibility to read more about Iran and the revolution, complete with real-life photographs and audio.

Once Reza is done taking pictures, he descends into the streets to see the sights and talk to the people, giving us the first exploration area of the game - and these are the parts where the game truly shines. Reza's decision to serve as a chronicler of the revoltuion allows us to learn about the methods by which the revolution was spreading itself and the ways different people viewed it and its goals, but also much more than that: going to the right places and talking to the right people can teach you about anything from the Shah's economic policies and their effects on the Iranian working class to Iranian traditions and cuisine.**




But this is a revolution, and idle exploration cannot last forever. Other than very few QTE sections, which are about as exciting here as they tend to be in any other game, gameplay outside of the exploration sections involves making dialogue choices. This is where the game's storytelling strengths really made an impression on me early on: one of the first decisions you have to make is to choose a side in an argument between two of your friends, and the choice is given in the form "Side with Babak" or "Side with Ali". At first I panicked, because I'm used to being made to pick a character's side before I even knew their names - but I realized very quickly that I had no such problem in this instance. It may seem like a small thing, but the fact that few games - and indeed, stories in general - make their characters recognizable this early on makes 1979 Revolution's character-building stick out even more from the crowd of story-based games.




At this point you might suspect that 1979 Revolution's developers took some inspiration from Telltale, and you would be generous: the thing is a complete and utter rip-off. In a game so clearly modeled after Telltale's games, to the point of telling you that a character "won't forget" a choice you've made, perhaps having a rather important secondary character called "The Walking Dead" is a bit much.

But plagiarism, when done so well, is easily forgiven. The game's story is masterfully paced, transitioning seamlessly between the excitement and noise of revolutionary gatherings to quieter, reflective sections where Reza and his friends discuss their ideals, deal with inter-factional intrigue, and even a look at Reza's family life and the tough balancing act between loyalty to one's ideals on the one hand, and loyalty to parents and siblings on the other. Many a middle-class youth turned political activist can attest to a similar conflict, though few will ever face the sort of brutal repression meted out to the Iranian protesters.




1979 Revolution has a fascinating story, but that's not where its significance lies: its true importance lies in how it works as a specifically video-game narrative, where active identification with the protagonist's motives is vital - as opposed to more passive media such as films and books, where understanding and sympathy can be enough to maintain one's interest. However, it should be noted that the game is hardly a technical tour-de-force. This should not harm one's enjoyment of the game; if anything, the fact that the technical issues present are barely felt after the very first sections is a testament to the game's strengths. However, it should be noted that janky controls, frame-rate drops and re-used character models abound, never enough to make the game unplayable and certainly never enough to harm one's enjoyment of it, but enough to be felt.




However, the game does have its fair share of more significant problems, and these go beyond technical issues. In fact, most of these are perfectly captured in the introductory interrogation scene. The interrogator, Assadollah Lajaverdi - who is based on the real-life, notorious warden of Evin Prison - tells Reza that he knows that he joined the revolution upon returning from Germany, an exposition dump which is completely unnecessary to the conversation and is said only for our benefit. Another line that I found puzzling is when Lajaverdi says that Reza committed crimes "against Islamic republic of Iran". Since Farsi has no definite article, it makes perfect sense that an Iranian who may not be very fluent in English will omit a "the" every now and then. However, since the conversation takes place between Lajaverdi and Reza in Iran, there's no reason for them to be speaking in English, so there's no reason why we shouldn't have a correct translation here. It's a nitpick, but it's the sort of small detail that makes or breaks believable dialogue.

It is also unfortunate that a game that in general does such a good job at establishing a video-game narrative misses the opportunity to have us experience Reza's suffering in a more meaningful way, especially when this has been done in games in the past. When you are jailed in Skyrim, escape seems impossible, and the game does a lot to convince you that your character might really be stuck in prison forever. Metal Gear Solid, one of the finest examples of a video-game narrative, puts you through actual physical pain during a torture scene that feeds into the feeling of oppressive isolation in your jail cell. It's too bad that 1979 Revolution's developers could not come up with an equally creative way of driving home the horrors of imprisonment.




These criticisms may seem petty, but the small weaknesses are only so glaring because of how well everything else works. Where video games before would usually deal with history with either the vulgarity of Company of Heroes or the shallowness of Assassin's Creed, here we have a game that takes a critical, analytical and well-balanced approach, without the false pretense of being objective. The game is clearly anti-Shah and pro-revolution, but it mostly lets the different factions speak for themselves, even if the portrayal of all Tudeh party members in the game as violent, hot-headed thugs betrays a certain bias.

Most importantly, the game deals with an issue that's rarely talked about when it comes to revolutions in the Middle-East - the central role of women. The most important character in this regard is Bibi, a leader who, at one point, breaks up an argument between supporters of Tudeh, the National Front and the Mujahideen, telling them that they need to remain united despite their differences. Whatever you think about the political point, the fact that members of all three factions treat her with respect is a break from the myth that people in the Middle-East - especially Muslims - will not accept a woman as an equal, let alone as an authority figure.




The 1979 Revolution had a tragic end, and the game does not shy away from that fact. But it also shows us what could have been, and what could be in the future. For this reason and many others, 1979 Revolution: Black Friday is a game that anyone with even a passing interest in human history or interactive story-telling should experience.

Score Calculation: This is usually where I make a silly joke, but this doesn't feel like the right time, so I'll go ahead and give it

Final Score: 9

* These examples were chosen quite at random, and yet it's sad to see how much the state of the region today resembles the landscape of 1979.

** One interesting part discusses how anti-Shah speeches were recorded on cassette tapes and smuggled into the country to rally the people to the revolution. It's not hard to imagine smug Western commentators at the time using this fact to show that Western technology was the catalyst behind the revolution, much like they did with Facebook and Twitter during the so-called "Arab Spring".

March 30, 2016

Hating on Code: I'm a fantastic programmer, and I hate every minute of it

Why do we like to do the things we like to do? A lot of people seem to think that it's all about what we're good at: if you're good at something, you're much less likely to be frustrated while doing it, and much more likely to get positive feedback from yourself and others. As sensible as that theory sounds, it's not hard to think of counter-examples to it, and now that my full time job isn't really about writing code, I can finally give mine: I'm probably one of the best programmers you'll ever meet, and I feel very comfortable saying that, because I don't take any pride in it. In fact, I really, really hate it.

Coding is awful. It's dreary, bland and frankly pedestrian work. As evidenced by the many apps, games and other types of software out there created by people who are - for lack of a better term - complete idiots, anyone can do it, and since the mobile market and indie gaming exploded, pretty much everyone has.

That's not to say that there aren't really talented and creative people who code. Some of my best friends write code. I code, and I'm practically the Best Person. But there's a lot of brilliant people out there waiting tables, too. The only thing differentiating programming from construction work is that it's a lot less dangerous and requires much less finesse, so the next time they tell you capitalism rewards those who work harder, keep that in mind.

Programming had a lot more brains to it back in the day, when you had to remember and understand all sorts of deep algorithms to write efficient code. In one of his follow-ups to the infamous Go To Statement Considered Harmful, Dijkstra wrote

"The theorem of “The bounded linear search” states [that] for any boolean function B on the first N natural numbers (N≥0),

|[ var f : bool; var n : int
; f, n := true, 0 {P}
; do f ∧ n ≠ N → f, n:=B(n), n+1 od
; { P ∧ (¬f ∨ n=N )}
]|

with the invariant P given by

P :     0 ≤ n ≤ N     ∧
(f ≡ (Ak : 0≠k<n : B(k)))     ∧
(Ak : 0 ≤ k < n–1 : B(k))

which states that, upon termination
in the case of f : all B’s are true, and
in the case of ¬f: n–1 is the smallest value for which B is false.

By my standards, a competent professional programmer in 1987 [...] should know the theorem of “The bounded linear search” [...] should be able to derive that theorem and its proof [... and] should not hesitate to use it."

I have no idea how to read that notation either, but the point is: the idea that programmers nowadays should be familiar with some obscure mathematical theorem is ridiculous. For any algorithm that is likely to be used in a modern application, there's someone who already implemented it and uploaded it to GitHub. Do you know what the Aho-Corasick theorem is? Can you derive its proof on the spot? Probably not, and neither can I, but here it is. There's no more sense in having a programmer in 2016 learn "the theorem of The bounded linear search" then there is for him to know how to write in Assembly. This means that, while a lot of people think that when a programmer wants to sort an array, he writes something like

public static void mergeSort(Comparable [ ] a) {
        Comparable[] tmp = new Comparable[a.length];
        mergeSort(a, tmp,  0,  a.length - 1);
}


private static void mergeSort(Comparable [ ] a, Comparable [ ] tmp, int left, int right) {
        if (left < right) {
                int center = (left + right) / 2;
                mergeSort(a, tmp, left, center);
  mergeSort(a, tmp, center + 1, right);
  merge(a, tmp, left, center + 1, right);
 }
}


private static void merge(Comparable[ ] a, Comparable[ ] tmp, int left, int right, int rightEnd ) {
        int leftEnd = right - 1;
        int k = left;
        int num = rightEnd - left + 1;

        while ((left <= leftEnd) && (right <= rightEnd)) {
                if (a[left].compareTo(a[right]) <= 0) {
                        tmp[k++] = a[left++];
                }
                else {
                        tmp[k++] = a[right++];
                }
        }
        while(left <= leftEnd) {
                tmp[k++] = a[left++];
        }
        while(right <= rightEnd) {
                tmp[k++] = a[right++];
        }

        for(int i = 0; i < num; i++, rightEnd--) {
                a[rightEnd] = tmp[rightEnd];
        }
}

In reality, it's more like

Arrays.sort(a);

Of course, I didn't even write that merge sort code - it's all copied from the internet. (I did edit it a bit because seriously, if you're writing an if clause without braces, you're just being a dick.)  I'm disgusted by the mere idea of writing any code if I can avoid it. Just read the documentation for Apache's sort function to realize how ashamed you should be for even thinking about doing it yourself. You wouldn't think of all those little details off the top of your head, would you? No, you'd probably just copy code from the internet like some fool.

Now, if you love writing code, that might sound terrible. When you're enthusiastic about something, you want to do it as much as you can. If you love a video game, you're not going to just play it once and forget about it. You'll play it again, and you'll play it without dying, and you'll play it only using your left thumb, and you'll play it so much eventually you'll be able to beat the whole thing without looking at the screen. That's the feeling I get from a lot of programmers I know: I'll tell them about a problem that should be solved by making significant changes to infrastructure, and they'll argue that we can just write a script and run it every now and then to overcome it. They just want to write more code, really.

Luckily, my aversion to all things compiled and interpreted leads to some very good practices. For example, let's assume we need to implement a method which take a string encoding certain bits of information, separated by commas, and we need to extract some of the info and return it in another comma separated string. Any programmer can tell you what's wrong with this code:*

public String parseInput(String message) {
 String[] splitMessage = message.split(",");
 String ip = splitMessage[3];
 String date = splitMessage[7];
 return String.format("%s,%s", ip, date);
}

At the very least, one should declare a few variables:

private static final String messageDelimiter = ",";
private static final int ipIndex = 3;
private static final int dateIndex = 7;
...
public String parseInput(String message) {
 String[] splitMessage = message.split(messageDelimiter);
 String ip = splitMessage[ipIndex];
 String date = splitMessage[dateIndex];
 return String.format("%s,%s", ip, date);
}

But declaring variables is only the beginning. It's not enough that you don't have to hunt down every instance of a variable you change in the code, because whether or not this code works doesn't depend solely on you, but on the people around you. What if someone decides to change the delimiter without letting you know, as they sometimes do? What if someone decides to switch around the order of the delimited substrings without telling you, as they sometimes do? And, of course, what if some manager decides just before you're about to head out that you need to extract way more information from the message - as they, quite often, tend to do? Now you need to rewrite the code, make sure it works, commit it, make sure the commit works, upload the new version of the application, make sure it works, and then when it invariably doesn't work, go through the whole thing several more times?

If you love programming, maybe you feel like you just hit the jackpot. Personally, I prefer to always have a configuration file handy, so that no constants taint the code:

@Setter
@Value(...)
private String messageDelimiter;
@Setter
@Value(...)
private int ipIndex;
@Setter
@Value(...)
private int dateIndex;
...
public String parseInput(String message) {
 String[] splitMessage = message.split(messageDelimiter);
 String ip = splitMessage[ipIndex];
 String date = splitMessage[dateIndex];
 return String.format("%s,%s", ip, date);
}

Now if someone decides that colons are better for delimiting the data than commas, all you need to do is change a text file. But what about the third problem? What if you need to add another field to extract? You need to add more index variables and to change the string format of the return value. Using some Apache packages - which you should always do whenever possible - you can write

@Setter
@Value(...)
private String messageDelimiter;
@Setter
@Value(...)
private int ipIndex;
@Setter
@Value(...)
private int dateIndex;
...
public String parseInput(String message) {
 String[] splitMessage = StringUtils.split(message, messageDelimiter);
 String ip = splitMessage[ipIndex];
 String date = splitMessage[dateIndex];
 return StringUtils.join(Arrays.asList(ip, date), messageDelimiter);
}

Which takes care of the format. But what about adding the other variables? Well, the great thing here is that you don't even need to care about which variables you're extracting - just get their indices from the same configuration:

@Setter
@Value(...)
private String messageDelimiter;
@Setter
@Value(...)
private List<Integer> indicesToExtractInOrder;
...
public String parseInput(String message) {
 String[] splitMessage = StringUtils.split(message, messageDelimiter);
 List<String> extractedVariables = indicesToExtractInOrder.stream().map(i -> splitMessage[i]).collect(Collectors.toList);
 return StringUtils.join(extractedVariables, messageDelimiter);
}

And that's that - the exact details of the method's behavior are now completely separate from the pure logic of the code. You can do this without Java 8, but you shouldn't - that would require writing more code, and we wouldn't want to do that. Besides, I also like to show off a bit.

So yeah, I'm not a fan of programming. I didn't really do a lot of programming growing up. I don't solve Project Euler problems in my spare time. Hell, a while back, at a job interview, someone asked me to implement a singleton pattern, and I just didn't remember how to do that. I remember now, because it's something I needed to do at some point at work - and it took about 5 seconds to read about it and learn how to do it (never mind the fact that competent, professional programmer in 2016 should know about the @Component annotation). But when you look at both ends of the process that the code above went through, I think you'll find that in this case, hate has its merits.

I know I must have done all sorts of code faux pas here. Since I don't have Eclipse installed on my home computer, I have no idea if any of it even compiles. I could've been more thorough, but then again, that would require doing more programming.

Which again -

I hate.

*Well, I'd like to believe that any programmer knows that's wrong, but I think we all know that's not true.

March 19, 2016

New Song - Laila Lo Shaket feat. Ofir Lessel (Shlomo Artzi cover)

Shlomo Artzi is one of the most successful and popular musicians in Israel, with a career spanning decades. Although he's rightly associated with some obnoxious elitism, I really love most of his music, and more importantly, I think much of it will benefit from a touch of metal - as evidenced in the newest addition to my SoundCloud, featuring my incredibly talented brother Ofir:



Spread the word!

February 27, 2016

Firewatch - Do you wanna know why we keep starting fires?


More like "hiking simulator", amirite?


For all of its troublesome origins, the term "walking simulator" remains a very useful shorthand for a genre that has become very popular in recent years: exploration games that are based more on narrative and immersion than on any standard gameplay mechanic such as combat, stealth or puzzle-solving. It's a great idea on paper, and it sounds easy - until you remember how hard it is to get anyone immersed in a world with which the only modes of interaction are looking around and reading conveniently-placed notes. Questioning established gaming tropes without coming up with any of their own answers, most games in the genre have felt anywhere from uninspired to downright lazy, with at least a dozen Gone Homes to every Stanley Parable.

It is with no hyperbole, then, that I say that Firewatch is by far the best walking simulator I've played to date. While far from perfect, it shows a rare understanding of how to build a setting and get players invested in a story, to the point where I already know that I will play through it again - something that I've never done with any other walking simulator.


Firewatch's replay value is due mostly to it being so enjoyable, but there are a few choices to be made which not only have certain (admittedly minor) effects on unfolding events, but also serve to draw you into the story. The game starts by telling you that you are Henry, a man in his 20s who is getting very drunk with friends - say no more! I immediately identify with this guy. But at some point, Henry notices a fetching lady and decides to hit on her. The lady turns out to be a professor, and Henry must have way more game than me, because while I never had much success hitting on my professors stumbling drunk, Henry and Julia end up getting together and eventually getting married. Their happiness is not long-lived, though, as you eventually discover that Julia is suffering from dementia.

The decisions you make during the aforementioned sequence, especially those that take place as Julia slips further and further into dementia, will tell you what sort of person your iteration of Henry is. This entire intro is composed of text intercut with scenes of Henry making his way to the forest where the bulk of the game takes place, and while this is in all likelihood a budget move, it is surprisingly effective and does a good job of separating the part of Henry's life taking place before the game and the part you will be most active in.

No option to make a Metal Gear Solid reference, then?

Sadly, this is where the problems start. As a game based mostly on immersion, Firewatch cannot afford to be as shallow as it is in the decisions it has you take. For example, after a particularly exhausting day of taking care of Julia - already very ill - Henry wants to steal away a few hours at a bar while Julia is asleep. That you will go out is a foregone conclusion - you can only decide whether or not you will block the bedroom door so that Julia can't get out. If you think your character wouldn't leave his mentally-ill wife alone at home, or if you think he could get just as some much relaxation from staying in with a bottle of Jack and playing some Rocket League, sorry - the game has already decided to disregard your opinion on the matter.

Firewatch is littered with such immersion-breaking moments, and they're not limited to the decisions you make alone. Most of the game has you walk around a reserve, taking care of fires and other disturbances. It's absolutely gorgeous, and walking around the forest, taking in the view, discovering animals and admiring the foliage - when it's not clearly just made of flat, pixelated textures - feels great. It's a world so easy to get lost in - that is, until you want to maybe get closer to where another character is supposed to be and hit an invisible wall, or when you talk to a couple of characters far away who are clearly just blacked-out stick figures, or when you look at a tree and notice one of the aforementioned flat leaves. And then immersion breaks, completely and irreversibly.

Seriously, these leaves.

Don't get me wrong - I'm not big on immersion in video games. It tends to encourage treating playing them as an escapist activity, and I find escapism troubling in any media. But in Firewatch, immersion is pretty much all you have - otherwise, your computer game story is just a cartoon with questionable production values. I realize that one can only spend so much money on a game's visuals, but it seems to me that making the world less pretty overall but more cohesive would have been a better use of resources.

And still, Firewatch draws you in. It is so beautiful, so well-written and well-paced, so charming, that all these issues are easy to swallow. For every bad texture or plot convenience you find, there's at least one moment where you adopt a turtle, find a raccoon, or listen to a really great exchange between Henry and Delilah, the other main character in the story, that just puts a big smile on your face. The running time isn't long, even with optional content factored in, but the wealth of dialogue options and secrets make Firewatch a deceptively deep experience.

Seriously, this turtle.

Most importantly, Firewatch shows how walking simulators should be done, sort of like how the original Batman showed how Batman movies should be done.

Let's hope the next one is a Batman Begins rather than a Batman Returns.

Finally, I just had to get in how hilarious it is that we needed a rope 
to climb down this barely two meter, easily scalable wall.

Score Calculation: Turtles have hexagons on their shells. Raccoons have two colors (black doesn't count, because it is the absence of a color). In my book, that's a

Final Score: 8

Verdict: Firewatch's significance far exceeds its score. In a genre plagued by pretentiousness and laziness, it is a genuine and successful effort at being artistic, emotional and entertaining. We fully expect it to become an inspiration to some truly great games in the future.