Pages

Wednesday, July 03, 2019

I made my first Mario Maker 2 course! This is my first stab at Mario Maker creations ever, and I specifically decided to jump straight into it, without playing any of the Course World or Story Mode  levels, just to see where my own ideas could take me. I'm pretty happy with the result!

The level is called "Bowser's Judgment Day", and here's the code:  2RS-9DW-KKG

Thursday, June 27, 2019

10 Reasons Why Cadence Of Hyrule is a better game than Crypt Of The Necrodancer


If you haven't heard of Cadence Of Hyrule yet, it's a wonderful rhythm game for the Nintendo Switch, developed by Brace Yourself Games, as a spiritual successor to their first game – Crypt Of The Necrodancer. The new game is based on the same mechanics and similar gameplay, but it is set in Hyrule, the definitive setting of the Zelda series.

Cadence Of Hyrule is a very important milestone for indie games in general, because it marks the first time that Nintendo licensed the Zelda intellectual property to an independent game developer. Unlike the original game, however, which was recently on sale for $5 on the Nintendo Switch, and $3 on Steam, Cadence of Hyrule is only available for the Nintendo Switch, and will set you back a hefty $25. So why should you spend all the extra moola for this one?

#10: It’s a Zelda game.

Let's be honest. If they just re-skinned Crypt Of The Necrodancer and slapped a Zelda title on it, I'd probably still buy it, out of curiosity. Luckily, that isn't what they did at all. In fact, it is an entirely different game.

#9: Better plot.

The plot of Cadence Of Hyrule isn't very deep or meaningful, but comparatively, Crypt Of The Necrodancer pretty much didn't have a plot. The new game is definitely an improvement, and introduces a well-familiar story about – spoilers – using the Triforce to defeat Ganon and save Hyrule, albeit with a few unique twists, that – spoilers – have to do with music.

#8: Puzzles.

It wouldn't be a Zelda game without puzzles, would it? The puzzles aren't very challenging, and there aren't a ton of them, but they greatly improve the variety of gameplay, since you're not just hacking away at enemies all the time. Most of the puzzles are based on either Simon Says, finding a secret entrance, or figuring out how use your items and surroundings to get to a seemingly unreachable place that contains a treasure chest.

#7: Enemy mechanics and boss battles.

Many familiar antagonists of the Zelda series can be found in Cadence Of Hyrule. Zols, Bokoblins, Octorocs, Lizalfoses, Moblins, Lynels, and even the rock giant from Breath Of The Wild – Talus.  They aren't just re-skins of Necrodancer enemies, though. Well... Zols and Bokoblins are. But the rest of the enemies introduce unique mechanics that will really make you think and strategize, before rushing head-first into battle. Lizalfosesses will run at you with a dagger or a spear, Moblins will throw spears at you from a distance, and Lynels will induce deep, existential dread, completely validating "run away" as a battle strategy.

All of the enemy battles scale with your progress, keeping the game challenging all the way till the end credits. There are six boss battles, which are as intense as they are imaginative. Four of these bosses are classic Zelda characters, who had their names converted into cheesy puns involving musical instruments. Zelda fans will surely get a laugh out of this one!

#6: Zelda music.

This is one of my favorite aspects of the game, and it just shows how much there's left to talk about, because it's not anywhere close to #1. The music consists of masterful interpretations of many classic Zelda tunes – a few hours worth – in different genres, including rock, funk, techno, folk, heavy metal, and jazz.

There are almost always two versions of each tune: an upbeat and energetic version for battle, and a more mellow and relaxed version that kicks in when all enemies on the screen are defeated. Hearing a really intense heavy metal track at Death Mountain change to a tinny robot voice carrying on with the tune makes me laugh every time. Even the title screen music, with its percussive piano chords, harp arpeggios, and steady, splashy drums, makes me want to just sit there and listen to it for hours!

#5: Much improved graphics.

The new game's overworld looks like a modern version of A Link To The Past. No longer the flat checkerboard world of its predecessor, Cadence Of Hyrule is positively three-dimensional, with its exaggerated tilt perspective, multi-tiered buildings and landscapes, tunnels, and stairs. The checkerboard, which is there to help you accurately judge distances, is much subtler this time around, and is only visible around the player's character, making it far less distracting than the neon disco tile in Crypt Of The Necrodancer.

Every character model looks great, and is instantly recognizable as a character from the Zelda series. Weapon animations for each individual weapon and item have been added in Cadence Of Hyrule, replacing Crypt Of The Necrodancer's generic "swipe" animation when attacking and a static shovel icon when digging.

#4 Storing weapons and items.

Crypt Of The Necrodancer had a very rudimentary and limited inventory. You could, for example, have up to two weapons in your inventory, but not until you've obtained a special storage pouch item. This made testing and comparing different weapons excessively difficult.

Cadence Of Hyrule does away with this entirely, and provides you with an unlimited inventory. All the weapons, charms, and abilities that you've unlocked are always available in the inventory. The weapons can have a higher damage, an area of effect, or a greater range. You can also upgrade certain weapons with different effects, such as life drain, poison, or extra damage. This can totally change how you approach enemies, and encourages switching weapons to optimize battle strategies. I wound up switching between five different weapons throughout the game: a normal spear at first, then Poison and Titanium spears, and Link's and Zelda's special weapons later in the game.

#3: Permanent weapons, charms, and items.

One of my biggest frustrations with Crypt Of The Necrodancer was losing my favorite weapon after being defeated. In Crypt, weapons and items disappeared after each inevitable "game over". New weapons and items were randomly dispersed in treasure chests, so the chances that you would get your beloved spear back during the next dungeon run were extremely low. All the items were also one-time-use, which pretty much meant that other than health refills, I would never use items.

In Cadence Of Hyrule, inventory is permanent. Weapons, items, and charms carry over even after you die. The only things you lose are rupees and keys. Similar to Breath Of The Wild, some items are "breakable", which means that they will run out as you use them. Others, like the hook shot and the boomerang, can be used without any limitations – not only during combat, but in solving puzzles as well.


#2: The level doesn’t end with the song.

Perhaps the most punishing aspect of Crypt Of The Necrodancer, you could only explore each dungeon while its soundtrack was playing. Once this relatively short song ended, the level would end as well. A trap door would suddenly appear, and drop you into the next level. Any part of the dungeon left unexplored would be gone forever, along with its treasure chests, item shops, and much needed health upgrades.

In Cadence Of Hyrule, you can take as much time as you want while exploring dungeons and the overworld. If you take your sweet time, you might hear the song end and restart from the beginning. However, given that the songs are fairly long, this is unlikely to happen unless you specifically want to hear the song in its entirety.

#1: Fixed-screen battles.

In Crypt Of The Necrodancer, every map was a fairly large, randomly generated dungeon. Similar to a side-scrolling platformer, your character would always remain in the center of the screen, and the dungeon would scroll around this pivot point. This worked perfectly well for combat, but it meant that you would only pay attention to the area immediately surrounding your character.

By contrast, most of the battles in the overworld of Cadence Of Hyrule take place on a single, fixed screen, much like the original Zelda game, or the original Megaman games. The movement of the player's character doesn't cause the screen to move at all, making it much easier to concentrate on parts of the screen that aren't in the middle, since every part of the landscape always stays in the same place.

Once you've defeated all the enemies on the screen, you no longer have to keep up with the beat, and the enemies won't respawn, leaving you free admire the landscapes and the music, chat with non-playable characters, and explore all the puzzles, hidden pathways, and secrets on that screen. And that is what Zelda games were always about: exploration.

So is Crypt Of The Necrodancer completely irrelevant now? Not quite. Being a true rogue-like, where every map is randomly generated, and none of your items carry over after you die, Crypt Of The Necrodancer will still be a hit with those who want the intense experience of unrelenting dungeon runs, to speedrunners, and to hardcore fans of the rogue-like genre. Cadence Of Hyrule, on the other hand, will be more suited for those who want a well-paced experience, where you can take a break from the intensity of rhythmic battles, without having to take a break from the game.

There's a term that is often used to describe games like Cadence Of Hyrule: a love letter. The music, the landscapes, the puzzles, and the humorous character dialogue – all these were lovingly made by people who are clearly fans of the Zelda series. Cadence Of Hyrule is truly a delight to play, and I would readily include it among the best Zelda games ever made, which says a lot about a Zelda game that wasn't made by Nintendo.

Monday, May 27, 2019

My Top 3 Video Games of All Time


#3: Super Mario Bros. 3

Super Mario Bros. 3 holds a special place in my heart, because it was the game that I wound up playing the most in my youth. Released in North America in 1990, it was the video game that solidified the platforming genre, and it still holds up very well to this day.

A spiritual successor to the original Super Mario Bros., this game was expanded with the ability to run backwards within a level, various power-ups that enabled Mario to fly and swim, and the addition of a branching overworld, all of which made the game feel far less linear than it used to.

Super Mario Bros. 3 was no longer just a great platformer, but also a great puzzle game, full of secrets and exploration. I enjoyed the heck out of this game growing up, and I have replayed it many times since.



Why not the original Super Mario Bros.?


The original Super Mario Bros. was the game that revolutionized side scrolling platformers, so why is this one not in my top three?

I feel that Super Mario Bros. 3 is a better game in practically every way. It's certainly a better looking game, and there's a lot more to explore. However, I think that the biggest credit to Super Mario Bros. 3 goes towards how well Mario himself controlled. In the original Super Mario Bros., Mario felt a little too heavy and slow for the amount of platforming precision that the game required. By contrast, in Super Mario Bros. 3, controlling Mario felt like he was the agile ninja that he deserved to be.



Why not Super Mario World?


Super Mario World for the SNES was a fantastic game, and a great showcase of the SNES's power. It was graphically far superior to Super Mario Bros. 3. It was a much larger game, and introduced tons of new elements that made the game even more exploratory. Best of all, it introduced Yoshi! How could this not be my favorite Mario game?

I admit, this one was a close call. Mostly it comes down to the fact that I didn't grow up with an SNES, but there are few other things that I still prefer in SMB3. The Cape Mario power-up in Super Mario World seems a bit lackluster, compared to SMB3's Raccoon, Frog, Hammer Bros., and Tanooki power-ups.  Most interesting, however, is the music. While I love the variations of the Super Mario World theme in different levels, there's only one theme in the entire game. Super Mario Bros. 3, on the other hand, has a much greater variety of music.

Another reason SMB3 stood out is because it was the best game on the NES. Super Mario World felt like a great iteration on SMB3, but it didn't feel revolutionary, and there were certainly more impressive games that later came to the SNES.



#2: Limbo

This one came at a time when I lost most of my interest towards playing video games. The year was 2010. The mobile games market was exploding. Games were churned out by the hundreds for mobile devices, and they were all equally unimpressive. The people who ran Nintendo thought that randomly wiggling a remote control in a sports game qualifies as fun.


Though I barely played any video games during this time, I was introduced to Let's Plays – YouTube videos of other people playing video games, while creating a (usually humorous) commentary. That is how I discovered Limbo, through Josh Jepson's channel. I was so immediately impressed with the game, that I had to stop watching the Let's Play and actually play the game.

The artistic design of Limbo is unlike anything that existed at the time. It was still a 2-D side scroller, but entirely black-and-white, with dramatic lighting effects, a projector vignette, and a little bit of film grain. Sound was used sparingly and effectively. The beginning of the game was almost silent, aside from a soft, scratchy noise, reminiscent of an old record, and the footsteps of the game's nameless protagonist. Environmental sounds were used specifically to alert the player of an important event, which often happened off-screen, and prompted the player to react or investigate. Musical cues, in the form of single-tone ambient harmonies, were used to indicate a change of pace or a grim revelation in the unspoken story. Oh yes, nearly all of the revelations were grim. This was a dark game. But it was also, very definitively, art.

Honestly, if Limbo had no gameplay whatsoever, I would still enjoy playing... err... watching it. Just seeing and hearing it will make you feel like you're in a tree house during a thunderstorm. Luckily though, it was also paired with some great light platforming, and clever and challenging environmental puzzles. And it did a remarkable job of keeping the puzzles fresh. As soon as you learned to solve one kind of puzzle, it was never repeated again.

I have replayed this game a ton, and I like to show it off to my friends who haven't heard of it, because it is such a beautiful masterpiece.



Why not Inside?


Inside was the spiritual sequel, and likely the story prequel, to Limbo. It was still pretty grim, but visually very different from Limbo – rendered in a 3-D engine and in color, though still using mostly off-shades of gray. Nevertheless, it was certainly original and beautiful in its own way.

It also had a deeper story than Limbo. An unspoken story still, there were just enough visuals to tie it to Limbo and generate a great number of theories about what it all means. So why do I still prefer Limbo?

Inside was a longer game than Limbo, but it felt much shorter, because a lot of time was spent simply moving from point A to point B. I completed Inside in its entirety (aside from the secret ending) in one sitting, while Limbo occasionally fried my brain and prompted me to put the game down and call it a night.



#1: Portal

Portal's origins are as fascinating as the game itself. Created by a team of college students from DigiPen Institute of Technology as a reinvention of their own game prototype, Narbacular Drop, it was published by Valve in 2007 as part of a multi-game package called The Orange Box. Portal wasn't a selling point of The Orange Box, by any means. It was virtually unknown at the time, and the main draw of The Orange Box was Half-Life 2 – a very highly regarded game and a technological marvel of that time, and its highly anticipated sequel, Half-Life 2: Episode One. Nevertheless, the quality of games that Valve was releasing at the time was very good, and gamers were hot on Valve's heels to try out every game they churned out.

The premise of the game is pretty simple. You play as female protagonist named Chell, in a first-person 3-D world. You control two ends of a portal, which can be placed on any white surface. The portal is only active if both ends are placed. Any physical object entering one end of the portal will immediately exit out the other end, preserving its momentum. That's really it. Why does this make for a good game?

It turns out that the amount of puzzles that can be created with this fairly simple mechanic are staggering! What's even more interesting is that while this is a perfectly logical physical mechanism, it's not one that exists in our actual, real world, making all the puzzles in the game inherently challenging. So, while the rest of the game's mechanics are pretty simple – find an object, place it somewhere, activate a switch – the way those simple tasks are accomplished can be quite tricky. "Now you're thinking with portals" was the game's very apt tagline.

Portal's puzzles are tons of fun, but what really drives the game forward is the dialogue between Chell and the disembodied voice of the game's lovable antagonist, GLaDOS. Just kidding, Chell doesn't actually speak, so we'll call it commentary, rather than dialogue. As Chell, you are placed in a series of test chambers and tasked with finding the exit to the next chamber, all while GLaDOS hilariously discourages you from playing the game, gives you bad advice, and often shows signs of complete indifference towards Chell's well-being.

Unfortunately for Chell, it eventually turns out that her time at Aperture Science was meant to come to an abrupt and gruesome end in the last test chamber. It is at this moment that you stop receiving any kind of instructions whatsoever, and have to figure out how to escape your doom. Succeeding in this task will catch GLaDOS off-guard, and more hilarity will ensue throughout the rest of the game, as GLaDOS grows increasingly worried that you are now trying to find and kill her.

On your way to victory, you won't encounter a single human, but you will encounter some chatty turrets, seemingly insentient objects that may or may not feel excruciating pain, notes from previous test subjects who weren't quite so lucky, and GLaDOS's many conflicting personalities – all while solving more of those delicious, momentum-based puzzles. And then GLaDOS will sing you a song. And you will probably cry and laugh at the same time, for reasons you don't entirely understand.



Why not Portal 2?


Portal 2 was a fantastic game. The visuals were sharper, the gameplay was greatly expanded and the puzzles more complex. The game was much longer, great new characters were introduced, and old characters were developed even further. Plus, we got to see the heydays of Aperture Science and learn about Cave Johnson, its questionably motivated creator.

The story was great, plot twists were numerous, and the ending was great – they even threw in a whole extra song at the end! However, nothing will ever beat the first time you hear GLaDOS's maniacal, yet somewhat endearing commentary. Nothing will ever beat the first time you hear sentry turrets talk about their feelings. Nothing will ever beat falling in love with the Companion Cube. And nothing will ever beat the first time GLaDOS sings you a song about how you didn't really win the game. Portal 2 turned out to be a great sequel to Portal, but it was simply impossible to match the pure joy created by the original game's element of surprise. Portal still takes the cake... and eats it, too.

Tuesday, March 07, 2017

npm3 Shenanigans

I'm beginning to see why people hate npm. Both npm-shrinkwrap and npm3's dependency deduping are terrible ideas. npm-shrinkwrap is meant to solve a problem that has to do with programmers incorrectly using semver to specify dependency versions, thereby encouraging programmers to keep incorrectly using semver and putting an ever-expanding bandaid on it, rather than fixing the actual problem. npm3's dependency resolution fixes a problem that npm never had, with a poorly designed feature that is way outside of npm's scope. Instead of including all sub-dependencies with the package that requires them, like npm2 did, npm3 will attempt to merge the dependency trees. This means that the resulting dependency tree will differ depending on install order. "Does this matter? No!" says the documentation; except it totally does: 1) Some problematic package installs become intermittent, 2) The size of the install is sort of arbitrary, and 3) Don't tell me you've never edited a source in node_modules for debugging purposes; now these will (maybe/sometimes) affect all the subdependencies that also use the same module, making it that much harder to debug. Luckily, npm3 still allows you to specify --legacy-bundling to avoid automatic deduping entirely. Keeping my fingers crossed that they will keep this option indefinitely. As for npm-shrinkwrap, just don't use it! If a dependency doesn't use semver correctly, either don't use that dependency, file a critical bug, or fork it and fix it yourself.

Friday, December 23, 2016

Inside: Game Review, Theories, Major Spoilers

Limbo's distinctly noire style,
film grain and all.
Limbo has been my favorite game for a number of years now. I've been following its maker, Playdead Studios, anticipating the release of its new game, Inside, ever since it's been announced. That is, up until last summer, when I got sidetracked by other things, and apparently missed the fact that the game was released on June 29th of this year. Not only am I several months late to the release party, but I only found out about it at all after listening to Polygon's "Besties" podcast. Needless to say, I purchased the game for my PS4 immediately.

Inside continues to explore the all familiar world of environmental puzzles, suspense, and horror, that Limbo established so well. Inside has a very similar feel of a bleak, hopeless world, where science seems to exist solely for the purpose of conducting experiments on human (and sometimes pig) bodies. However, unlike Limbo, where the general feel was eerie emptiness and abandoned machines, the world of Inside is very much populated with humans, and things that seem to have been human in the past, which makes the game feel even more suspenseful and frightening.


The art style of Inside is a stark contrast with Limbo. Even though it's still a 2D puzzle platformer, it's rendered in a 3D engine, which makes the world more immersive, and gives the player much more depth perception, especially when things happen in the background. This mostly does not seem to impact the puzzles themselves, but it certainly contributes to the storytelling and the building of anticipation and suspense. Inside still keeps to a very modest color palette, so while not entirely black-and-white, it still feels just as drab as Limbo. Nearly the only bright color you'll see in the game is the boy's red shirt, which makes him stand out from the rest of the world.

Inside spent 5 years in development prior to its release, and the amount of polish on this game is remarkable. The way that the camera moves when you enter a new room through a doorway, with just enough delay to show you that there is indeed a wall there, but not enough to make it annoying when the character is obstructed. The way that it zooms in on small rooms and tight crawl spaces, and pans way out to open up the vast scape of underwater depths. The background scenes of marching zombies, that serve as an omen of what's to come. The scenes where you reach a domed glass window, and you lean against it and hope to see what's ahead, but the camera stops just shy of revealing the secret. The sound track and effects are glorious. Nothing ever glitches or looks out of place. It feels like you're inside a real world. A horrible, nightmarish world with procedurally animated sacks of bone and gore.

The reaction of other characters in the game feels extraordinarily genuine. There's a scene where you hang over an large open hatch, in plain view of a couple of scientist, while watching them get increasingly agitated. If you keep waiting for a while, they eventually scramble to pull in a portable security robot to take you down. It just makes you feel like there are real people on the other side of the screen, and just like yourself, they don't always succeed in what they do; your success is their failure.

Rather than stick with pushing boxes and pulling levers, Inside introduces a number of new mechanics, all of which work very well. The most heart-thumping of these is the concept of baiting, where you get to make someone almost catch you, just to keep them far away from something that you can then proceed to quickly run to. The little boy can swim now, and the submersible adds to your ability of exploring the underwater world without the sort of time limits that holding your breath underwater would require. There is a new take on gravity puzzles, where the ocean hangs above you. What should seem like a familiar Limbo mechanic of changing water levels feels fresh and new. Last but definitely not least, the ability to put on a helmet and control other zombies is mind-blowing. But more on that later.

My main gripe about Inside is its difficulty level. It felt much easier, and hence much shorter than Limbo. After you inevitably get absorbed into a conglomeration of bodies that the Internet has been lovingly referring to as the Blob, the game becomes mostly a story book, where you get to run across the screen, destroying everything in your path. There are a couple of puzzles here and there, but they're easy and scarce. So while it was still interesting from a storytelling perspective, this segment didn't satisfy my craving for awe-inspiring puzzles that I assumed I would have to solve to finish the game.



Then there's the ending. I guess I liked it. It was abrupt. It was definitely a huge slap in the face of the player. "You wanted to escape, right? Well, you escaped. Congratulations. Also you're a horrible limb monster." Were they just trying to make a joke about the alternate meaning of Limbo? There have been a number of theories floating around the internet about what the ending tells about the main character of Inside. I'm going to stick to the one that makes almost too much sense.


The secret ending gives away a lot of it. In it, the little boy encounter an office space with a computer terminal and a mind control helmet, that's hooked up to... unknown. As he rips the cable out of the wall panel, the system powers down, and everything goes dark. But just a second before it does, you see that the little boy slumps over and becomes motionless, exactly the same way as the zombie puppets do when they're disconnected from mind control. It's very clearly established that the little boy is a zombie puppet himself.

It was also well established that zombie puppets can themselves operate mind control helmets to control other zombie puppets, in what was easily my favorite mechanic of the game. The first time I plopped a zombie's head into that glorified lampshade, and that cardboard box popped open to reveal another zombie, my jaw hit the floor. I had never experienced anything even remotely like this. I only wish that the creators had used this mechanic in more puzzles, and maybe layered more of that Inception-like goodness and eventually had you controlling a 10th order zombie to perfectly trigger a chain of events that would solve the puzzle.

But I digress. Just prior to the final segment, where Inside goes full Cronenberg, and the little boy is absorbed by a mushy sack of bodies, you are tasked with unhooking it from four mind control helmets. The blob, of course, is using these helmets to control other zombie puppets. It would make total sense if the blob had been controlling the little boy all along, only to lead him into the water tank and absorb him.

Some of the related theories fall apart for me. One is that the little boy is somehow special and gives the Blob superpowers, which is how it's able to escape. I think it's far more likely that the little boy is just a sack of meat and bones, like all the other zombie puppets. It just so happens that the Blob absorbs enough bodies by the time you encounter it, that it feels strong enough to attempt to escape.

The other theory is that the Blob is actually controlling you, the player, who is in turn controlling the little boy. This doesn't make sense to me, because once the blob is unhooked from the mind control helmets, you're still controlling it, not the other way around. I think the Blob is controlling the little boy.

So who is really controlling the Blob, then? That part is definitely ambiguous. It could be a rogue scientist, or it could be you, the player. One may surmise that you are the real Blob, holed up Inside your living room, playing video games, and absorbing all of their mindless zombie characters into yourself, until eventually you feel overwhelmed and want to escape.

Monday, November 16, 2015

CitiBike Guest

I've been using CitiBike for a couple of years now, and mostly loving it; especially now that they have a bunch of stations in Jersey City!

Here's an idea: make it easier to give rides to guests. Why? I often wind up in a situation where I want to ride my bike with another person, but they don't have a CitiBike membership, so I have to convince them to try it out, and then go to the pay station, insert my credit card, and get the unlock code, all whilst my guest is getting uncomfortable and eventually changes his/her mind.

Instead, I would like it to work like so: *blip* I just got a bike; *blip* I just got a bike for my guest. The advantage? My guest isn't aware of any transactions involved, and doesn't have time to change his or her mind. Here's how it would work:
  1. I use my key to unlock my own bike. The light turns green and I take the bike out.
  2. I use my key to unlock my guest's bike. The light starts flashing green.
  3. If I press "1", my credit card (on file) gets authorized, and the bike gets unlocked. If I press anything else, or don't press anything at all, nothing happens. This way I can never accidentally unlock an extra bike if the previous bike I docked failed to lock. This also has an extra advantage that if I'm just trying to unlock a bike for myself and the light starts flashing green, I will *know* that my previous bike failed to lock and I can inform CitiBike.
The guest's bike would get charged per hour of use, just like it does currently, and I think it would convince many to actually get a membership!

Tuesday, September 01, 2015

Why UltraViolet is a failure.

I bought yet another blu-ray movie with one of those "redeem your digital copy" cards inside. I usually ignore them, but this time I thought, why not? UltraViolet seems to be a thing now; it stood up to the test of time. My optical media isn't going to last forever, so I might as well get my moneys worth!

To start, I searched for an iOS app that plays UltraViolet movies. No such thing. There are apps that supposedly connect with UltraViolet to redeem the purchases, which allow you to then stream or download from a digital retailer, such as Flixter, Vudu, or M-GO.

Fair enough, let's start with Flixter. Netflix? Nope, that was Quickster. Whatever, this one's owned by Time Warner. How are the reviews? Four and a half stars! Great! Oh... no, it doesn't actually play movies. Scroll down. Flixter Video! One and a half stars?! Okay, maybe the reviewers were a little harsh. Nope! Most of the complaints are about not being able to play movies offline, or not being able to play movies at all. Not going to bother with this one.

Moving on: Vudu. Same story.

M-GO. Good reviews. Nice interface. Setting up an account was pretty easy. Okay, now I have to set up an UltraViolet account, too. Now I have to link it to the M-GO account, which is done by entering my UltraViolet credentials on M-GO's site. Not very secure, but whatever – it's not like my UltraViolet account has got anything to steal. Linked!

Finally! Let's add those movies! Enter the redemption code on UltraViolet's site. Choose your digital retailer: Flixter or Vudu. That's it. Try another movie code? Same story. Enter the code directly on M-GO? Doesn't work, of course.

Dear Time Warner and Walmart and all the movie studios that made a deal with these decrepit spawn of digital hell: let me recap my situation. I wasn't entirely happy with how Apple handled things, what with their DRM and being restricted to their ecosystem to watch any of my purchased movies. Honestly, it was mostly a matter of principle, because I was actually able to play those movies on all of my devices. The only real issue was "if I ever switch to Android", which of course doesn't support iTunes purchases. Instead, I now have these mysterious UltraViolet digital... somethings. These somethings have zero chance of being played back on any of my media devices.

Saturday, December 06, 2014

iPhone 6: The Good, The Bad, and The Mediocre


© 2014 Apple Inc.

I finally got my iPhone 6 in the mail, and after playing around with it for a couple of days, I have many a praise, but also a few criticismesses.

The Good.

1. Touch ID.


Yes, I know, it's been there since the iPhone 5S. However, since I'm upgrading from the iPhone 5, it's new to me.

Words cannot express how well this feature works. It is simply amazing! It reads your fingerprints and only your fingerprints, and it reads them every time without fail, in a mere fraction of a second. You can store multiple fingerprints, which is very helpful if you want to unlock the phone with either hand, or maybe if several people are using the same device.

2. Slo-mo video recording at 240 fps.


It's official: my iPhone sees better than I do. Watch a droplet of milk fall into a cup of coffee, a pro skateboarder perform a complicated trick, or your house lights flicker, all at an impressive 720p resolution. Oh yeah, did you know your house lights flicker 60 times per second? I didn't, until I watched it in slo-mo.

3. Flash photography.


I believe the advanced flash was also introduced in 5S, but it is nonetheless remarkable. No more zombie-colored portraits! In fact, I will go ahead and state for the record that at close range, my iPhone 6 produces the best flash photography I've seen so far.

4. Video stabilization.


It's there, it works, and it makes videos look a lot smoother and more professional than they used to be.

5. Speaker.


For some reason, no one mentions this: the iPhone 6 has a massive speaker, compared to the minuscule, tinny-sounding speaker of the iPhone 5. You can actually hear the bass lines this time around, and it won't make that horrible clipping noise when you turn the volume all the way up.

6. Retina.


Not a new feature by any means, but the screen is as gorgeous as ever, perhaps even more so, now that it's quite a bit larger.

7. Background App Refresh and Google Hangouts.


Not really an iPhone 6 feature either; it has more to do with iOS 8 and Google doing a great job on the app.

After jumping through a few hoops, I was able to direct all my Google Voice messages (SMS) to Hangouts, and from there on it was smooth sailing. The push notifications work, and since the app uses background refresh, your messages are already loaded when you swipe on the notification. There's no wait time for the message to load, and you don't even have to be connected to the internet at that point. What does that mean for me? It means I can still read my SMS in a timely fashion, despite the fact that my Gmail emails now arrive with a 15 minute delay. More on that in a bit.

The Bad.

1. I don't like giant phones.


It's a personal preference. Many people like giant phones: there's a reason why Apple made the iPhone 6 Plus. The iPhone 5 was already too big for my liking. The iPhone 6 is so big that I can no longer hold it with one hand and press the home button. I have to use a new "typing grip" as well: holding the iPhone 6 by the sides with my index fingers, and supporting it on the back with the rest of my fingers, while typing with my thumbs. Typing and holding the phone with the same hand is now completely out of question.

2. Camera sticks out.


Everyone knows about this. It's ugly, and if you don't have your phone in a case, it will never lay flat on a table. That said, I always have mine in a case, so it's not a problem.

3. No support for push for Gmail accounts.


This was probably the biggest upset for me. It's not entirely Apple's fault. Some of it is Google's. You see, Apple never supported push via IMAP. However, there was a way to get around that, by setting up Gmail as an Exchange account instead. However, at the end of January 2013 Google disabled the ability to use Exchange to connect to your Gmail account, on any new devices. This means that my email now arrives with a 15-minute delay, which makes SMS forwarding pretty useless.

I tried out a bunch of email apps to connect to Gmail instead, such as the official Gmail app, Mailbox, and myMail. They all seem to share at least one common problem: there is no support for background app refresh. Which means that when you swipe on that email notification, you have to have an internet connection, or else your email won't load. And even if you have it, there is an annoying delay before you can read the email.

Luckily for me, Google Hangouts implemented support for background app refresh, and it works beautifully. They've also integrated Hangouts into the web Gmail client, which works great as well, both for Hangouts/G-Chat and for SMS. So now I can say "adieu" to SMS-to-email forwarding; it has lost its use, and has been superseded by newer and better technology.

4. iOS 8 app crashes and bugs.


iOS 8 is not the most stable of operating systems. Though I'm not seeing as many rendering artifacts as I did with my iPhone 5, both Mail and Camera apps have crashed on me way too many times. There are some interesting bugs as well. For instance, try putting the Camera app into the video recording mode, hit "play" from the Control Center, and then start recording a video. If you listen closely, you will hear the sound of Apple's programmers getting fired. 

The Mediocre.

Battery life.


Sure, it's better than the battery in my iPhone 5, which after two years of use lasts for about 15 minutes during active use. The iPhone 6's battery went down to about 65% after two hours of dicking around. And I'm not talking about heavy usage and playing video games that will make your phone warm enough to heat your apartment during winter. No, just playing around with settings and shooting a few 30-second slo-mo videos. Not great.

~


Overall, I'm quite pleased with what the iPhone 6 has to offer. The slo-mo feature alone kept me occupied for hours at a time! Now let's get some support for push in Gmail accounts, and "we in beez"!


Friday, August 22, 2014

L00k, I haz JavaScriptz!!! ô-ô

I recently published several JavaScript libraries. Some not so recently:)

#1. Freemason

https://www.npmjs.org/package/freemason
https://github.com/spikesagal/freemason

A build utility that is super-simple to use and doesn't require any configuration. Here's an example:
var build = require('freemason').tasks;
build.concatenate('LAB.src.js','jsrequire.src.js');
build.minify();
build.attribute('src/credits.txt');
build.write('dist/jsrequire.min.js');

#2. Require

https://github.com/spikesagal/require

Client-side asynchronous script importing, built on top of LABjs. Here is an example:
var YourModule = require('/path/to/your_module.js', function() {
  YourModule.executeFunction();
});

#3. Wedge

https://github.com/spikesagal/wedge

A browser compatibility shim. Currently supports IE 8+.

#4. TemperSynth


A musical synthesizer with dynamically controlled scale temperament. This was my music hackathon project @ Spotify.

Sunday, December 01, 2013

Client-side JavaScript Module Loading

Thank you Tom Dale for pointing out why RequireJS completely misses the point of requiring modules. While I agree with that assessment, there are better ways to store (unparsed) functions than as strings.

I am still hoping to find a library that takes a healthy approach to implementing require functionality for client-side JavaScript. If I don't find anything soon though, I will have to make one myself. Here are the key aspects I will require of... require:

  • Modules should be stored unparsed until required.
  • A require command will be null code if the module had already loaded.
  • A require command will parse the module and append it as a property of the current scope if it had not yet been loaded but is available to the client.
  • A require command will attempt to retrieve the module file via AJAX if it is not available to the client.
  • A require command will throw an error if the module is unavailable on both the client and the server.
  • The same require command will be parsed by the packager on the server side to compile the module into the distribution file.

Now back to my quest...

Friday, November 15, 2013

Recruiter Professionalism

I've been searching for a new job since last week, and my life has been pretty much consumed by phone calls and interviews. Some good, some bad, some... ugly.

This morning, a certain recruiter, let's name him Ryu, calls me. Immediately after I pick up the phone, he puts me on hold for several minutes, and then the call ends abruptly. A minute later, Ryu calls me back, saying that he wants me to come in for an job interview with a certain company next week. "This will not be a technical interview," he says, "they just want to meet you, and then maybe you can meet their design team on another day, and if everything goes well they'll schedule you for a technical interview."

All this is really starting to sound like a lengthy process to me, so I let Ryu know that I am expecting offers to start coming in next week, and he of course wants to know which companies I'm expecting offers from. "Two of these companies are through personal connections," I say, "so I can't really tell you what they are." Without giving me the opportunity to tell him about the third company that I can indeed mention, he interrupts me.

"Well I'm not going to represent you if you can't tell me who you're interviewing with!" Ryu says with increasing fervor. I proceed explaining to him that those companies have specifically asked me not to reveal their identities to recruiters. "That's fine then, I'm just not going to represent you!" he repeats.

At this point I feel that this conversation isn't going anywhere. "Okay man, it was great talking to you." I say and hang up. A few seconds later Ryu calls me back. I patch him through to voicemail. Here is the transcription, verbatim:
Ah... I wasn't done, but... I wish you all the best Alex, you shouldn't hang up on me, because it's a small world, but... shame on you. That... That's just disrespectful, and I don't disrespect people, and... ah... I wish you all... all the best, but shame on you and ah... I... I... I... I hope you can work on your people skills, 'cause that was just... unprofessional. Bye.
Hm. Hadn't he just pointed out that he wasn't going to represent me? Twice? I felt the need to reply at this point. Maybe because I was so ashamed of myself. Here's what I wrote to Ryu in an email:
Hi Ryu,

"I'm not going to represent you" sounded pretty final to me. Not sure what else you were going to say, but speaking of being unprofessional: "shame on you", threatening me, and to a lesser extent putting me on hold and hanging up on me (yes, you just did that) qualifies as such.

Not representing me is your own personal choice, and clearly I'm not in a position to convince you otherwise. I hope you have a wonderful day, and many new clients.

- Alex S.
Seven minutes later, he replies to my email. Again, verbatim:
I got disconnected because my phone cut out

You were being irrational and the fact you don’t trust me says a lot

Good luck to you and shame on you for these threats
Uh. I'm not sure what confuses me more: the lack of punctuation, the fact that he is accusing me of being irrational and threatening, or the ambivalent last sentence? Either way, I am very, very ashamed of myself.

Sunday, September 22, 2013

What the iPhone 5C actually is.

Photo © Apple.

People, the "C" in "iPhone 5C" stands for "colorful", and not "cheap" or "China" as the Internets are speculating. Apple's website says so, right there in the tagline, so let's end this debate.

A more interesting question is, what is an iPhone 5C under the skin? Simply put, it is an iPhone 5 with a plastic back and a slightly upgraded camera. If you want to get technical, the guts have been reworked, but the components are mostly the same.

But why not just sell the old phone, like they did before? Two reasons. The obvious one is that a redesigned phone will sell better than last year's model. The other potential reason is that Apple is reducing the manufacturing costs by replacing an expensive dye-cut aluminum case with molded plastic. Moreover, the more expensive iPhone 5S uses the same case as the iPhone 5, albeit with three different finishes, so it's quite possible that Apple kept the tooling and the production capacity for the expensive aluminum case exactly the same.

It's nice to see a rounded plastic back making a comeback, though. I've been missing the ergonomic feel of my iPhone 3G for quite some time now. Apple's silicone covers for the iPhone 5C, however, are hideous.

Tuesday, August 13, 2013

Geotracking Paranoia

An article repost hit Facebook today about the "new hidden threat" of geotagging to your children, along with a short video segment from NBC on the topic. This "news" is spreading like wildfire, so before it gets out of control, please let me intervene.

The video mentions that this concerns "unwitty" users. If you are, in fact, unwitty, here is a couple of suggestions:
  1. Don't have children in the first place. You are endangering their lives every day by being unwitty.
  2. Don't use technology. You clearly don't know how it works or what it does.
If you're unsure whether you're unwitty, or if you're unsure whether you should be legitimately paranoid about geotagging, here are a few questions you could ask yourself:
  1. Did you know that Twitter is a public broadcast service, not a private photo gallery? If you did, you probably already knew that anyone, literally anyone, can read your posts.
  2. Did you know that your photos can be geotagged, and that you can turn that feature on or off at the time of your post?
  3. Can you put two and two together, and figure out that if you publicly post geotagged photos, everyone, and I mean everyone, will know exactly when and where the photo was taken?
  4. Did you know that even if your posts are completely private, the sites you're posting to still have full access to everything you're posting, and that all of that information can be released if subpoenaed by the government?
If you already knew all of that, there is one more question you need to ask yourself:
  1. Does the ability to plot data points on a map scare you?
If yes, you should put at least ten locks on your front door, at least fifteen on the back, board your windows shut, and hire at least two armed bodyguards to stay with you at all times, and also one bodyguard per child to stay with them.

If not, go on about living your life. Your children are safe as long as you're not being a dumbass.

Monday, August 12, 2013

Letterpress Strategies

I've been playing Letterpress on iOS for a while now. It's a great puzzle game; sort of a hybrid of scrabble and chess. If you haven't tried it yet, give it a shot!

Long story short, I got pretty good at it, and I'd like to share some strategies with you. They're somewhat ordered from the most basic to the most advanced. Without further ado, here they are:


If blue takes the "M" tile, Red can
 win the game on the next turn
with "FULLY". 

Mind the endgame.

One of the first and most important things I learned about letterpress is that you could be winning by a hefty number of points, and the next turn you lose the game. Always ask yourself, can your opponent close the board with the next turn after you've made yours? And if so, will they outscore you? Sometimes you will have to purposely not use an open tile, making it less likely for the opponent to use all the remaining open tiles to win the game.



The scores may be even, but blue
has the advantage with three
blocked tiles

Blocking tiles is what matters most.

Even if you just used half the tiles on the board, if you didn't block them off, they can easily turn over to your opponent.

Don't be fooled by the running score. The score only matters at the end of the game. Oftentimes, using shorter words that block more tiles is better that using longer words that don't block as many tiles.





Block corners first. 

Blue blocked off "E", which is the
most commonly used letter in
English. He could've blocked "D",
But there are three of those on
the board.
Corner tiles are the easiest to block, since they only require two adjacent tiles. Sides need three adjacent tiles, and the tiles in the middle of the board need four.
If you have the first turn, try blocking corners on your first move. It will provide for a nice head start. If a corner is already blocked by your opponent, try blocking a different corner.

Block commonly used letters with rarest occurrence on the board. 

Think vowels, especially "E". If there is only one "E" on the board, and it's in a corner, try to block it off. It will be very easy for you to defend, and hard for your opponent to take.

Blue left "Q" for the last turn.

Blocking hard letters. 

Letters that are hard to use, like "Q" or "Z" don't necessarily have to be blocked off. They will be harder (or impossible) to use for the opponent anyway. However, you can also use these letters to either securely block other tiles, or to detract the opponent from blocking his.

Save super-hard letters for endgame. 

Sometimes there is only one possible word you can make with a certain letter, and it's a short word. If you use it too soon, you may be giving your opponent a free turn to block more tiles.

Don't let blocked tiles lead you away from using them. 

If blue needs one "F" in his word,
It's better for him to use the one
that's already taken by his
opponent.
They won't turn over to you, but they are still very much in play, and can let you make better and longer words. In the example above, Blue can play "QIS" to win the game, even though "I" is blocked off.

Turning over vs. taking a new tile. 

The same letter can often be found on both an unused tile and a tile that has been taken by your opponent (but not blocked). Unless taking the unused tile will block another tile, it is almost always better to turn over your opponent's tile.

Double-block. 

Blue has "E" double-blocked.
It's highly unlikely that Red will
ever take it back.
Blocking tiles is good, but blocking tiles that block the said tile is even better. Aim for a solid, continuous block of tiles, rather than blocking on the opposite sides of the board. Sometimes your opponent will want to take a specific blocked tile. A single-blocked tile can be turned over to your opponent in just two turns, but a double-blocked tile is generally not worth consideration.

Defend. 

Unblock the opponent's tiles. Your primary goal is to block as many tiles as you can, but if you think a turn ahead, you can chip away at blocked tiles, and take them in two turns. When you spot your opponent setting up to take a lot of tiles, it's time to turn over the tiles that would allow them to do so. If you can block tiles at the same time, all the better.

Mutations. 

Some words have different forms, like plural or past tense. In most cases, the longer form of the word is the one you should use, since the shorter form will then count as having been played, and cannot be used again. For example, if both "RIVER" and "RIVERS" can be played, choose the latter; "RIVER" can no longer be played after you've played "RIVERS". However, there are exceptions.
Both "FRIED" and "FRIES" are
possible. In this case, avoid the
word altogether.

Firstly, if the word's shorter form is not actually part of the longer form,  consider how many tiles can be turned over if the opponent chooses the other form of the word. For example, if you play "STRATEGIES", the opponent can still play "STRATEGY", possibly to his  advantage. In many cases, it is better to choose a different word entirely.

The same goes for anagrams. If you play "USURPERS", the opponent can play "PURSUERS", potentially turning over all of the tiles used in that word. Again, in this case it's probably better to come up with a different word.

Lastly, if a word has more than two forms, like a plural form of the noun and a past tense of the verb, it may be better to play the short form of the word. For instance, if "SURPRISED", "SURPRISES", and "SURPRISED" are all on the board, it may be better to play "SURPRISE", so that if your opponent plays "SURPRISES", you can then play "SURPRISED", thereby turning the tiles over to yourself.

Remember, this mutation strategy is to be used for tiles that you do not block. If you do block them, you needn't be worried about the next turn.

It's not obvious, but Blue can play
"FIZZY" on the next turn to block
four tiles, and also unblock
Red's "S"!

Scatter. 

This is an advanced strategy that requires you to think both about your opponent's next turn and about yours. I use this when there are no good ways to block off many tiles in a single turn. The trick is to make two words to be played: one that would be hard for the opponent to turn over, and a second word that will "fill in" the adjacent tiles and block a number of tiles. This is quite hard for the opponent to defend against, unless they guess what the second word is, or can otherwise block the tiles you're after.

Review the word list. 

You never know when someone missed a word form, or when you can think of a combination of two words already on the list, or just use the list as a reminder of possible prefixes, suffixes, and endings that help you form longer words.

Write down words that you think of.

Say you've thought of a nice long word, but it doesn't make the cut for the current turn, because it doesn't block enough tiles. Save it for a later turn. This is especially useful if you're playing several Letterpress games at once.

Last but not least, be vigilant. 

If your opponent makes a mistake, like not going for the plural, use it as an opportunity to undo their turn. And remember, winning with a score 13-12 is still winning!

Tuesday, May 01, 2012

RIM's Revolutionary All-Original New Phone

Without spending any unnecessary time on making unnecessary fun of RIM's dire state of competitiveness, their ridiculous "Wake Up" ad campaign in Australia, or their business plan of acquiring better third party developer support by outfitting them with "very, very stripped down" versions of the phone...

...To the left you will see what the above mentioned phone looks like. To the right is a totally unrelated phone.

Wednesday, April 25, 2012

Gruber on Microsoft and Skype

Microsoft should just buy Skype so they can make sure the Windows Phone version is top-notch.
Good one!

My theory is that Microsoft considers Skype an equity rather than a product to integrate into their software, or a resource of talented developers.


Monday, April 09, 2012

Auto-Installed Malware Hits Macs

Be afraid. Be very afraid. We haven't heard of such things since the good ol' days of Windows 95 and IE6, but now there's an auto-installed trojan on the loose, and millions of Macs are infected.

The malware affects OS X users who use Safari with Java enabled. Follow through here to check whether your machine is infected.

Thursday, March 08, 2012

The new iPad and "competition".

The new iPad was announced yesterday, and although I'm not in the market for one myself, I consider this the one that is really worth getting. The two major improvements are a Retina display and a good camera, likely the same as the one found in iPhone 4S. Those two things were critically missing in the previous iteration. Sure, a faster processor and 4G LTE wireless network support are always welcome, as well as the numerous software improvements.

Meanwhile, the press are split into two factions: Apple admirers and Apple opponents. The latter group is currently reporting their usual crazy statements like this one:
For Apple’s rivals, most notably Google Inc. and Microsoft Corp., the incremental improvements in the latest iPad may be just the opportunity they need to establish themselves as legitimate competitors to the world’s most valuable company.
This corporate bullshit talk sounds very familiar to me. Spoken from first person, it's a denial of one's own poor performance. Notice how the article is not even denying that the new iPad will dominate the market; instead, it uses ambiguous lingo to get you to think so. All for a good cause, I guess. The cause, of course, is making money from serving advertisement to people who read the article.

I'll go ahead and make a statement of my own: if Apple hadn't come out with a new iPad this year at all, they would still dominate the market with their old tablets. iPad 2 is orders of magnitude better than anything else on the tablet market today. In fact, Apple created the market, and pretty much owns it. There is no competition. As popular as Kindle Fire has been, it is not competing with the iPad; it is competing with Kindle and other e-readers. The reason for that is that while Kindle Fire is a decent e-reader, it is horrible for pretty much anything else.

Friday, November 25, 2011

Pulling the plug on Google Wave.

Google Wave has been in a terminal coma for over a year now, and Google is finally disconnecting the life support:
Dear Wavers,

More than a year ago, we announced that Google Wave would no longer be developed as a separate product. At the time, we committed to maintaining the site at least through to the end of 2010. Today, we are sharing the specific dates for ending this maintenance period and shutting down Wave. As of January 31, 2012, all waves will be read-only, and the Wave service will be turned off on April 30, 2012. You will be able to continue exporting individual waves using the existing PDF export feature until the Google Wave service is turned off. We encourage you to export any important data before April 30, 2012.

If you would like to continue using Wave, there are a number of open source projects, including Apache Wave. There is also an open source project called Walkaround that includes an experimental feature that lets you import all your Waves from Google. This feature will also work until the Wave service is turned off on April 30, 2012.For more details, please see our help center.

Yours sincerely,

The Wave Team