The Mezunian

Die Positivität ist das Opium des Volkes, aber der Spott ist das Opium der Verrückten

10 Reasons this Post is No Ruby

Since I’m sick o’ political bickering, I’ll focus on the much mo’ important issue o’ programming language wars.

The most interesting thing ’bout programming languages is how their quality is inversely related to the quality o’ the people who use them. While I’ve found nobody who defends PHP beyond “it’s faster” & “it’s convenient”, & it’s design is so laughably inept, one wonders if ’twas an intentional joke, PHP developers tend to be much better people to be round, since they focus mo’ on actually accomplishing things than whining & scribbling rants ’bout conspiracies gainst the public caring mo’ ’bout practicality o’er their language. Languages like Ruby & Lisp1, meanwhile, were quite elegantly designed, but is filled with some o’ the most socially inept douche bags e’er who have this amusing tendency to try demanding things o’ people o’er whom they have no authority. “¡Just quit whining ’bout [ insert flaw in language ] & just use it!” while whining ’bout flaws o’ some other language. The logic is that if you can’t deal with some absurdity in their language, you’re just too dumb, e’en though the fact that one can remember the quirk ’nough to complain ’bout it should be proof that one can understand it; but if they can’t handle some absurdity in some other language, it’s ’cause it sucks.

To be fair, the 1 exception is the guy who made Ruby himself, Yukihiro Matsumoto, who sounds like a very nice person who seemed to make Ruby for incredibly unpretentious reasons, & e’en said, “I tried to make Ruby perfect for me, but maybe it’s not perfect for you. The perfect language for GuidoVanRossum is probably Python”, which is the inspiration for all my Matsumoto / Rossum slash fics.

I almost get the sense that Google hits get mo’ from attention-grabbing, contentious posts than those that are actually useful. While I’d like to get some useful info on Ruby, ’stead I get some incoherent rant, & now the rest o’ you get to suffer for it. ¿Curious, right? Wink, wink. ( Fuck you. )

{ // Braces, just to further rile Rubyists ( e’en though Rubyists do use braces for hashes — shhh ).

’Nother fun idiotic debate ’mong Rubyists & other people:

“Man, Ruby & Rails have no good documentation. Just this drugged-out shit. Face it, programming is ruined”;

“There’s plenty o’ documentation. Get off your ass & look”

“¿Could you provide some evidence?”;

“Find it yourself. Do something yourself for once”

Nothing better than expecting people to prove a negative.

I can, however, prove that the official Rails guide is so shitty that it actually caused me errors ’cause o’ a dumbass typo:

¡Looks like your prettyful Apple computer couldn’t help you now, DHH, whom I know totally wrote this guide! ( ¡Stop whining & just get off your ass & pay thousands o’ $ on o’erpriced garbage hardware already or I won’t hire you for my shitty company! )

}

This writer, whose job description is apparently “Converting beer to code since 2004” ( ¡& now he’s converting writing to beer for me! ¡How nice! ) wrote an article called “10 reasons not to use Ruby”, which sounds like a drunken rant ’bout how lame Ruby is, man, but is actually a drunken rant gainst people who make ’scuses for not using Ruby, man.

1. Ruby isn’t as mature as Java or PHP

My grandmother has also been around longer than Ruby, but I don’t go about using her to build Web apps every other day.

Maturity == age.

Speaking o’ maturity, that’s an argument a fucking child would make — c’mon. “If PHP’s so great, ¿why don’t you use it to drive to work?, huh”.

2. Ruby isn’t as performant as .NET or Java

That’s true, & is ’specially a problem in web programs, where people are particularly impatient, already have to deal with loading resources ( essentially downloading software as they’re trying to use it ), & likely to be on much slower architecture than the o’erpaid web developer who should probably be doing mo’ to deserve their high pay than worrying ’bout whether their language is fun to use. ( ¡Stop whining ’bout my slow website & just use it, customers! God, ¿why do I e’en let you idiots give me money? )2 Considering how bewilderingly slow websites still are e’en with modern technology, this should be a big issue.

You’re right. Ruby is also slower than Erlang, Lua and C++ but you don’t go about writing Erlang or C++ code every day, do you?

Um, yes, plenty o’ people do.

It’s good to see that we’re still sticking to the sullen technique o’ twisting reasonable arguments to extreme non sequitors. This argument is essentially, “Nothing’s perfect, so any depths o’ quality is acceptable”. Awesome.

Web development isn’t all about code performance.

It’s 1 o’ the most objective ( note, I said “most”, for e’en benchmarks are questionable ) criteria — certainly mo’ than “fun to use” & quickness o’ development.

Your new shiny Web app doesn’t have a million users a day for day one. You need to code it, test it, release it, rinse and repeat, and you need to do that quickly.

Keep in mind that this person is telling you you should experiment with new programming languages — ’cause nothing is quicker than learning new things.

Hiding behind the “performance” argument is not only cowardly, it’s plain wrong, because instead of focusing on releasing your app as quickly as possible, you’re focusing on the unknown promise that one day you might have to worry about scale.

Fucking performance pussies, man.

So, it’s wrong ’cause it’s not important in this writer’s opinion — ’cause nothing’s worse than wasting your time preparing for the future. It’s much mo’ professional to only focus on spewing out shitty software as quickly as possible.

¿Aren’t Ruby programmers s’posed to be smart? & I must say, it’s probably mo’ “cowardly” to change topics to development speed to avoid actually addressing the issue.

3. Well, Ruby apps scale as well as .NET or Java apps.

“I say so, therefore it’s true”.

We all end up there, clench our teeth and handle it like adults.

So that’s how you optimize Ruby. You can’t really blame detractors for not understanding such an obscure — & I must say unorthodox — method.

“Handl[ing] it like adults” apparently means bitching ’bout imaginary critics online & making appeals to extremes.

We might do it differently, but we do it all the same and usually begin at the DB level rather than the application level. Curious, right?

You’ll have to show a bit mo’ cleavage 1st, Sir.

4. Ruby doesn’t work well on Windows

¿It doesn’t? Worked fine for me. Not sure what magic allowed Compass to work all those years I used to have Windows.

Instead of banging your head against the wall, complaining that you’re used to Windows and all that jazz, just take a deep breath, install Linux and get on with life. Technology is about learning new things, not staying in your comfort zone forever.

“Just quit whining & setup a whole ’nother operating system just so you can fulfill my language fetish”.

I have a better idea: how ’bout you guys quit whining & make Ruby work well with Windows.

’Cept Ruby works fine for Windows, so maybe you should just stop arguing with idiots — worse, strawman idiots you made up in your schizophrenic head. I can imagine all the ghostly voices dragging him down to his knees — echo 'use $PHP…'; echo 'use $PHP…'; puts you.leave_alone! me

5. Ruby isn’t as popular or commonly used as PHP

Perhaps a less stupidly-circular argument based on true concerns is Ruby’s lack o’ easy compatibility with existing services, such as MySQL or common hosts. For example, my host doesn’t have Ruby installed, so using Ruby would be an absolute no for any o’ my websites ( a’least for distribution — in development, all bets are off3 ), as much “funner” it is to use than lame ol’ PHP & it’s dumbass error-handling or “echo” function. Rubyists would tell me that I need to change my entire host & go with some obscure, o’erpriced alternative, ’cause shared hosts are, like, a “ghetto”, or something.

( Or maybe that’s Rails — all ’cause Shaw hates a bunch o’ people he had to work with & ’cause dumbass DHH had to restart his server a lot, I guess. )

Technology isn’t a popularity contest, otherwise we would all be developing Websites in Javascript (currently the most popular language on Github).

Um, we are all making websites in JavaScript ( well, we’re making lowercase websites in camel-case JavaScript, a’least ). For instance, Rails, which I’m sure this guy uses, uses JavaScript, e’en if it has to compile a superfluous cheap knockoff into it 1st for no good reason. That’s ’cause JavaScript is the defacto language o’ browsers.

Technology is means to an end.

That end being feeling cuddly when one types code rather than ensuring compatibility ’tween their code & their architecture or not spending days trying to get a compatible architecture running.

Popularity is a warped factor that tries to measure adoption rate and community activity to help people gauge production-readiness, code stability and support level.

¡Those fiends!

Here’s a novel idea for you then – Try checking production-readiness, code stability and support level on a per-technology basis, rather than throwing popularity figures into the thinning air.

That’s quite hard, considering “per-technology” is vague. “Technology” is anything related to computers. ¿Does he mean software? ¿Hardware? ¿Types o’ software one is making or types o’ software in which one is working? Considering the points ’bout Ruby being slower than PHP & its ilk & the problems o’ compatibility, one could still make good arguments gainst Ruby.

6. The Ruby community is condescending and snobbish

No… That couldn’t be.

Well, yeah, and the Java community is stubborn, the .NET community is closed-minded, the Perl community is quirky and the C++ community is a bunch of middle-aged, pipe-smoking elves.

Though I have nothing to do with the community, he is right that I’m an elf who likes to take a Tolkien toke on the leaf now & then.

Since Ruby is relatively young, and tends towards early adoption of many technologies, Rubyists have a relatively easy life when it comes to trivial stuff like tests, deployment, integrations with 3rd parties and so on. So when a Rubyist is “boasting” that things are easier in the Ruby world, they’re not looking down at you, but merely suggesting there’s a simpler, more pragmatic way of doing things.

See, here’s where we hit the true problem. Languages usually have advantages & disadvantages. Nobody can seriously argue that C isn’t faster than most other languages; they just try to argue that that factor isn’t important. & there’s something to be said ’bout the universality o’, say, JavaScript. Meanwhile, C++’s balance o’ efficiency & high-level abstraction, with a focus on things, makes it great for video games & heavy GUI programs, but probably obnoxious for anything else.

Ruby is I guess a nice-looking language, & it can certainly be used to make well-working software just like other languages. But when Rubyists say that the Ruby “life” o’ deployment & integrations for web development are easy, they’re just straight-up wrong. It’s an ol’ joke that in order to get Ruby frameworks working, you have to jump through a billion hoops — mainly ’cause, as he mentions, they love using obscure tools with li’l compatibility. ¿Why use JavaScript, which works right out o’ the browser, when you could use CoffeeScript, just so you could compile it back into JavaScript? You’d have to be a cave-dweller to not be able to make a program in JavaScript when 10-year-ol’s all o’er the world have been making “¿Which DBZ character are you?” quizzes for years; but that’s not sexy, so let’s add extra complexity ’cause we’re bored. Ruby prefers PostgreSQL e’en though apparently nobody on the internet knows how to use it ’cause all o’ the info I find online is just flat-out wrong ’bout what it’s e’en called in Linux’s terminal, all ’cause MySQL has some obscure imperfections that are immensely rare; web hosts prefer MySQL. & that’s not e’en getting into how you actually get your project off your local computer & onto an actual online host. Apparently you’re just s’posed to use Heroku, which is a lame limitation. It’s so bad that e’en the official Rails guide ne’er bothers to teach you how to put your Rails project online, as if a newbie should be satisfied being able to look @ their shiny Rails project on just their localhost. Ironically, preferring Unix was the 1 thing Ruby did right.

In fact, it’s strange that they make fun o’ PHP for being simple-minded, but also somehow too much o’ a fuss, e’en though on most hosts it works right out o’ the box. Literally all you have to do to get PHP working on a Linux computer is go to the software center & install Apache & PHP & put your files in /var/www/html. To get it working on any host, just upload PHP files to the file system & it works. When one complains ’bout PHP’s language design being half-assed, they’re probably right, as subjective as that may be; but to claim that Ruby is easier to deploy than PHP is nonsense.

In fact, sometimes Rubyists criticize PHP for being too simple — ¡e’en though that’s what Ruby’s s’posed to be good @ in the 1st place! “True developers” apparently don’t just upload files to a file system, e’en if using FTPS, — which doesn’t e’en exist, fingers; keep it up & it’s off to the grill — but [ insert 1 o’ many convoluted, unintuitive methods that hardly anyone uses & is surely incompatible with the vast majority o’ web hosts ]. They claim that performance isn’t an issue for start-ups ( ’cause all programming is for start-ups, & start-ups that are likely to fail are a great source o’ stable, profitable careers ), ’cause hardly anyone visits, ¿but you do need to worry ’bout 1 o’ those nobodies hacking you as you upload files? Rubyists can’t e’en decide what they like ’bout Ruby.

Strangely, this writer ne’er brings up the issue o’ security, which may be the 1 objective advantage Ruby might have o’er PHP. O, wait, maybe it’s a good idea not to bring up security with Ruby.

It’s funny, ’cause there’s so many arguments this guy could make that he doesn’t. There are entire websites dedicated to showing how shitty PHP is. It’s creator has a delightful nonchalance & seems to agree that PHP was just some hack garbage he puked out on 1 drunken evening & looks like he stumbled out o’ 18th-century Britain. It’s like this blog poster is an attorney for a victim o’ Charles Manson & is losing.

7. Ruby is too opinionated and takes away my freedom to do things my way

All languages do this. That’s like complaining ’bout English demanding you to use punctuation. Communication is based on consistent info. This applies just as well ’tween computers & people as ’mong people.

My only problem is the whitespace requirements, which are terrible, & is why I still prefer C-style braces & semicolons — though I think Ruby would work fine with just line-ending punctuation, since block-starters & “end” are just as specific as braces. I hate it ’cause I oft want to break up long lines o’ code & it’s much harder to do than in, say, C++, which lets you break code however you want & will always know where the line ends thanks to the semicolon, & thus saves its ugliness for stds & HTML-tag container templates.

¿Wanna know how an associative array o’ #s looks in C++?

std::unordered_map<std::string, int> gorgeous_list_;

¡What beauty!

( Yes, I know I can use “using std”. If I like namespace poisoning — ¡you revolting savage! )

Then ’gain, maybe Ruby’s better @ breaking up lines, since it does seem to be able to break up ’tween commas. I remember I had trouble breaking up lines in Python once & the solution was apparently to put some god-awful “\” or something & I’m like, ¿isn’t this s’posed to be better-looking than C++?

Let me ask you this – How many ways are there to write an HTTP routing component for a Web app or an image manipulation library?

I ne’er did it without biting: ask Mr. Owl.

Convention over configuration, best practices and clear codings standards don’t take freedom away from developers.

See, this is something I’d agree with, but Ruby doesn’t actually succeed well. For instance, Ruby has a radically different syntax from the C-style convention, including their bizarre use o’ “def” for “function” & “elsif” ( which is the stupidest bastardization o’ English since “RESTful” ) & having object members have a “@” in front o’ them & having static class members have 2 “@”s in front o’ them — ’cause that makes sense. Granted, PHP has those dumbass “$”s. ¿What the fuck is wrong with you people? ¿What e’er happened to the idea that code’s s’posed to be as comprehensible as feasible? ¿What made anyone think that $s & @s aided understanding in any way whatsoe’er?

The truth is that JavaScript’s better than all o’ them, ’cause they call variables “var” & functions “function”. ’Cause that’s what they fucking are. Then they fuck up block scoping & lose all their points.4 Good job.

& though I’m not exactly an expert in programming, despite my smugly pretending like I do throughout this post, I do know a lot ’bout web design standards, & know that Rails violates it in the most ridiculous ways possible. ¿Why didn’t they use that convention o’er configuration idea when deciding to make post, article, whatever entries use the primary key ’stead o’ an automatically-generated slug in the URL & not force me to use some hack that’s apparently been deprecated, but is, as far as I could find out, the only way to do so, & is e’en the way done by the most popular plugins? ’Cause, duh, ¿what’s SEO? ¿Why would anyone want to have the primary key in the URL? The user shouldn’t e’er e’en know ’bout the primary key — it’s there purely for the computer. This is a case where it’d be perfectly safe for Rails to automatically change this & it’d be the best for everyone. ¿Where’s that convention?

Rails also loads a bunch o’ empty JavaScript files for every Controller, e’en if they’re empty, which is a hilariously waste o’ server requests. This is in contrast to the common web-design convention o’ combining common files to minimize the # o’ server requests.

Yeah, I know I can fix these problems. But that’s my point: it’s configuration. Whenever anyone says, “¡But it gets rid o’ tedious configuration!” it always turns out to be bullshit, ’cause as it turns out, the software maker didn’t actually know what I wanted — definitely not ugly #s in my URL or empty JavaScript files clogging my pages’ headers, Rails.

Ruby’s opinionated and convention-driven approach helps developers not only to become more productive, but also to adhere to community-driven standards that aim to reduce boilerplate code to a minimum. Many people can chant the “KISS & DRY” paradigms, yet not as many adhere to it.

It fails. Ruby code has boilerplate code, just like any other language. Read any Rails tutorial & see all the code you’re s’posed to copy & paste. As we’ll both talk ’bout later, Ruby makes you do manual type-checking, which comes automatically in Java & C++ compilers. Also, e’en if you’re not making code everyone else has already made, there’s a good chance you’ll probably need to take just as much time looking up the code to understand how it works, which is why “reinventing the wheel” is actually useful in programming as a learning experience.

The funny thing is that Ruby is one of the only languages I know that lets you change absolutely anything, anytime, anywhere.

Your ignorance o’ Lisp isn’t that funny, nor something to be proud o’.

To be fair, this is the 1 good point Ruby has ’bove PHP. Not JavaScript, though, which also lets you change just ’bout everything… which shows how bewilderingly ignorant he is ’bout JavaScript.

Yet, people seem to be happy to adhere to its standards and conventions because it makes them more productive, without compromising their ability to innovate and be creative.

“Ruby’s best advantage is that it has a feature that nobody uses”. So we see ’gain: Ruby’s great, it’s programmers aren’t.

Curious, right?

Stop trying to get into my pants, you smarmy bastard.

8. Ruby isn’t as reliable as Java and .NET

¿Java & .NET are reliable?

Windows isn’t as secure as NetBSD. Oh No!!! I should dump my shiny new Windows for a NetBSD installation.

You just said earlier that I should dump Windows for Linux. Great. Now apparently I’m an idiot for doing so & have to waste ’nother afternoon deleting Linux from my hard drive. You’re truly making me mo’ productive.

While static languages offer a performance boost in relation to dynamic languages, due to their compiled nature, and a strict mechanism to ensure private and public APIs are adhered to, lets be blunt – How many bugs, in your history as a programmer, were the direct result of a wrongly-typed variable?

You’d be surprised.

I know a lot o’ bugs can be caused by functions getting bad parameters, ’specially when dealing with user input online, which is why JavaScript’s lack o’ type-safety is annoying. It’s just a way for me to have to manually check parameters to ensure they’re valid strings or #s rather than have the compiler do it for me, like in C++.

Ensuring a method can only accept variables of predetermined types doesn’t ensure sound and bug-free code.

It sure helps.

If anything, it adds noise to an otherwise clean code in case you do have to cast variables or read compiler complaints about wrong types.

The former is rare, & can be handled rather cleanly with generics ( in C++, a’least; don’t know ’bout Java or .NET ); the latter wouldn’t happen till you fix the problem ’cause the compiler would refuse to compile till you fixed it.

Ruby’s way of solving this conundrum is to promote testing as a culture. In other words, your code is as reliable as your tests, not as reliable as your method signatures.

Ruby’s solution is to make you do extra tedious work that compilers do automatically. But it’s much mo’ convenient, DRY, & enjoyable to work with — not to mention how much cleaner your code is with all those tests. ’Cause nothing’s mo’ enjoyable than writing tests.

8. Ruby lacks entreprise-level support

¿Is this a fancy way o’ saying “not a lot o’ rich people are paying people for this kind o’ programming”?

Sure, if you’re an enterprising ant working for a bunch of bureaucrats who consider COBOL to be cutting edge stuff.

Yeah, maybe if you’re 1 o’ those fucking conformists working for the man, ¿am I right? True radicals smash capitalism by using unpopular programming languages. That’s what Emma Goldman would do.

Ever heard of Engine Yard? No? But they offer fantastic enterprise-level Ruby support.

“Just take my word for it”.

I’m going to admit, I have no idea what argument’s going on in this point. He goes on to rant ’bout how big corporations’ll try to hide security flaws in their code out o’ greed, which is possible, I guess, — I wouldn’t put it past them — & then mocks developers for being so “incapable that the mere threat of being left alone ‘unsupported’ deters you from choosing a piece of tech”. That sounds mo’ like love advice ( ¿Curious, right? Wink, wink ), if anything else ( ¿or should that be “elsif anything”? ).

In an era where technological innovation goes hand-in-hand (and is often driven by) open source code, choosing a closed-source, monopolised, technology for the sake of support is choosing to stay one step behind everyone else. Just take a look at companies like Basho, RedHat, Canonical, 10gen, Cloudera and Engine Yard, who all offer open-source technologies as well as enterprise-level paid support.

I literally have no idea who any o’ those people are, ’cept that Basho is the god o’ haiku ( though I prefer Issa ). Hilariously, the link to Basho is broken, so clearly these companies aren’t doing that well.

9. Ruby doesn’t scale well

This is just a repeat o’ “¡But Ruby’s slow!”

Man, I’m noticing mo’ & mo’ that this writer would make a shitty lawyer. He acknowledges Twitter’s scaling problems due to using Rails, but uses that to praise Ruby for an irrelevant subject he already talked ’bout, & then goes on to talk ’bout other technologies that don’t use Ruby — 1 being C++, which he implied earlier was a ridiculous choice for web development. I guess he’s saying that lots o’ people use obscure ( well, for web development, if we’re including C++ ) programming languages to make web programs, so you should use Ruby, ’cause… ¿it’s a special not-all-that-obscure language?

He then says this:

Since no two Web apps are exactly alike, one should learn from battle-hardened experience of successful Web apps, rather than proclaim one technology is superiorly scalable than another.

But it seems that the “battle-hardened experience” indicates that some languages do scale better than others & that one should learn from the mistakes o’ Twitter & think ’bout scaling issues before it becomes a problem.

10. It’s a lot harder to find experienced Ruby developers in today’s market

“¡There’s fewer workers to exploit!”

¿Aren’t these programmers talking? ¿Why would a programmer complain ’bout a smaller supply? ¿Are they that ignorant o’ economics? “¡I’ll have fewer people to compete with! ¡That’s awful!”

That’s actually true, depending on where you are in the world. In Israel, for example, where .NET and PHP are more widely used, finding good Ruby developers is harder.

The true source o’ all the strife ’tween Israel & Palestine is that Israelis are ASP-fanatics, but Palestinians are hard-core Pythonistas.

I’m quite sure PHP & .NET are the most widely used all o’er the world. Ruby isn’t e’en close. That’s ’cause PHP comes embedded in Apache, the standard for Unix servers, & .NET is Microsoft’s pet, & we always need to leave room for their useless shit.

But, you know what? It’s also harder to find experienced Javascript developers.

( Laughs. ) ¿What? You literally know nothing ’bout JavaScript, ¿do you?

For fuck’s sake, you can’t e’en spell its name correctly.

In my mind, that’s a clear indicator that a certain segment of the market is in demand, and is on the rise, which is definitely a good thing.

This literally means nothing: “To me, that means some vague this is doing well. The fact that some things are doing well is certainly good”.

He then basically tries to say that there are mo’ experienced Ruby developers ’cause they’re smarter than PHP developers, which I doubt, but OK. If anything, developers would need to be smarter to work through PHP’s nonsense. But calling PHP’s documentation “fragmented” is ironic, since it’s commonly known that Ruby’s documentation is terrible & that documentation is the 1 thing PHP did well. E’en fans o’ Ruby admit it.

So, instead of shying away from a good thing because it’s hard, why not train Ruby developers yourself? I mean, if you agree it’s the right technology to use, why not invest in it?

¡But you’ve yet to prove that Ruby is a good thing! If this were a debate class, you’d fail terribly.

¿& weren’t you saying that Ruby is easier than PHP? ¡Gah! ¡Logic! ¡BOOM!

So… the take’way is that Ruby’s advantage is that it’s faster & easier for programmers, e’en if it’s less efficient, computer-wise… but there’s a good chance I’ll need to invest extra money & time into learning it, & is actually hard, but a good thing.

Pretty long article to just say, “Well, I like Ruby, so fuck you”.

I don’t know why we’re having all these debates. Everyone knows the best programming languages are C & Lisp, & that everything else is crap. But we still have to use C’s dipshit nephew, C++; C++’s douchie brother, Java; Java’s ultra-douchie younger cousin Ruby; idiot-savant JavaScript; & that alcohol-fetal-syndrome victim, PHP, ’cause we’re too stupid to understand C, & Lisp isn’t useful for making anything actually productive, ’cept for academics & shitty Yahoo e-stores. Better to be bitching ’bout not being able to use Ruby or Haskell or Brainfuck or whatever in 50-100K-a-year jobs than worrying ’bout losing a finger on the cutting machine used to make 1K a year.

’Sides, languages are ne’er based on logic, but just arbitrary history & popularity. ¿Will this guy try telling me that English is the most common language in the world — & the lingua franca o’ the programming world — ’cause ’twas well-made? ( ¡Just stop bitching & learn Esparanto already! )

Also, ¿don’t you hate those pushy listicles with titles that say something ’long the lines o’, “Why you need to do this thing right now”. Fuck you. I’d trust my plumber to teach me anything, e’en technological, ’fore I’d trust some idiot who writes listicles.

Strange Fun Fact ’bout Ruby

In 1 o’ my many waking comas where I’d just think ’bout random subjects for hours without e’en realizing it ’stead o’ doing anything productive I came up with this bizarre idea o’ a C++ / Ruby lovechild called “Crystal”, which would purportedly have the elegance o’ Ruby & the efficiency o’ C++.

Then I happened to notice “Crystal” in the list o’ languages in my notepad program & looked it up the find out, not only does it exist, but it pretty much fits my C++ / Ruby idea, as well.

They were right when they said people were spying on me…

Posted in Programming, Yuppy Tripe

The Shot that Was Not

The image that isn't.

You ‘scaped my camera eye this time,

my lovely waxing-gibbous morning moon,

by making its battery run out o’ time

just in time.

But next time…

Posted in Photos, Pictures, Poetry

Ed, Edd ‘n Eddy: Jawbreakers!

I wanted to end my GBA Tribute with Mario vs. Donkey Kong on March 21, exactly 1 year after I started it. But then I remembered I absentmindedly forgot this pillar o’ gaming & knew I had to continue.

Also, I ne’er did Mario & Luigi: Superstar Saga. But that’s later. We have, ahem, a masterpiece to discuss.

Jawbreakers! actually has a nifty game mechanic: it essentially copies The Lost Vikings, allowing you to switch ’tween “the Eds”, as the gamesters down in Peach Creek call them. Each character has different abilities: Eddy Gizzard can double jump & is generally the most agile, making him the most fun to play. He can also collect a jetpack & fly round in later stages. Double-Dogg-Dare-You can collect wrenches & slingshots & use them to fuck up deadly chihuahuas, chickens, & fire hydrants, but is a pussy & won’t walk o’er cement. Finally, Gravy Train can carry the others o’er dangerous terrain with a wheelbarrow & can collect a helmet to bash things with his head. However, he’s the least agile lump o’ fuck. Also, if he gets too close to a chicken, he starts chasing it, making you lose all control o’ him & forcing you to make Double-Draw-Bridge murder the sneak with his slingshot.

The game also takes a page from everyone’s favorite DK game, Donkey Kong 64, & gives them all their own… uh… ¿quarters? ¿Colored pogs? ¿Who cares? Collect 100 & you get an extra life.

The goal, as one can imagine, is to get all o’ the Eds to the end o’ the level. Unlike The Lost Vikings, if a character dies, you’re not stuck in an unwinnable situation & forced to just restart, but just makes you lose a life & sends that Ed back to the last checkpoint. On the other scale, I’m pretty sure The Lost Vikings didn’t have lives @ all & just let you retry levels an infinite ’mount o’ times, which, ’specially for an SNES game, was mo’ forward thinking than this GBA game made in the 2000s.

That said, this game does have autosave, which is nice.

You wouldn’t expect it, but the time can be rather frustrating, as these levels go on fore’er, every character but Eddy Blizzard is slow as sludge, & physics can be finicky.

This game’s biggest problem, I think, is that it’s not sure if it wants to be a fast-paced action platformer or a slow, exploratory puzzle platformer. The levels can be quite linear, despite their large size, & expect you to make many tiny, tight jumps ’cross moving platforms, & give you a time limit; but the characters move sluggishly, & 2 o’ the characters have immensely weak jumps. Having to traverse the whole level essentially 3 times can drag on. While I’d defend this in Donkey Kong 64, in this game the levels are a bit too linear & too similar ’tween characters, & the characters just move so slowly. Yes, sometimes characters have to take different routes ’cause o’ their different abilities; but mostly, the game just makes you wait for different characters to get to where your current character is so you can break whatever obstacle’s in the way with whatever ability key the other character has.

The interaction ’tween the camera & the level design is a bit wonky, too, leading to cheap deaths. It’s not uncommon to end up in a place where you’re forced to make a blind jump, with the high risk that you’ll fall on a rabid chihuahua & die.

The controls can be a bit wonky, too — ’specially with Double-Dutch-Fudge-Packer having B be both the run button & the stop-&-shoot button.

Speaking o’ shooting, the game’s not terribly out-front ’bout how the aiming works, so it’s quite easy to miss targets. The problem is, in many cases in levels you have to kill certain enemies for certain characters to pass, & there’s only a limited ’mount o’ ammo in a level, making it quite easy to end up in unwinnable situations.

The levels are cool, though. They’re based on settings from the show; & I don’t know if you e’er watched the show, but the art style o’ that show was great. It had an abstract style that was bizarre, but rather subtle in its bizarreness, & used subtly off colors, such as having purple tree trunks & yellow skies. Thankfully, this game keeps that art style, e’en if its in low-res GBA pixel-vision. Hell, they e’en kept the weird wiggly outlines on the characters from the show, which is impressive. Honestly, ’hind only the SNES & Genesis Capcom Disney games, this may be 1 o’ the best-looking 2-D pixellated game that tries to emulate cartoon graphics.

The level themes are also creative & refreshing: you go from hopping ’long window sills & trash cans in suburban neighborhoods to hopping ’long tire swings in a playground to climbing spider-web ladders in some dark woods to roaming wooden skeletons o’ houses in a construction site to climbing broken cars & ladders made o’ radiators in a junkyard to walking ’long clothes lines in a trailer park. 1 thing ’bout this game: you can’t say they weren’t creative.

The bosses are also rather creative, though not particularly complex. The levels are much harder. After the playground, Rolfe challenges Double-Duplex-Plex to a slingshot duel; after the woods, you have to complete some mirror-movement puzzle to make Nazz & Butter Toast Ghost come together so he can give her her communistic black book; after the construction site, Sarah pounds the ground like Donkey Kong, causing wrenches to inexplicably fall from the sky, forcing you to hastily switch ’tween the Eds to move them out o’ the way o&rsquo such deathly dirtiness; after the junkyard, Kevin… revs his bike in a corner, causing dirt to fling all o’er, forcing you to move Eddy Splinters out o’ the way; & after the trailer park, you have to solve some quick puzzle platform level to knock out the lead Kanker with that ubiquitous red wheel barrow glazed with rain water, rescue Double-Trouble-Barney-Rubble, & get the dodge out o’ hell.

What I like most ’bout these boss battles is that the challenge comes purely from slight mistakes you might make. I don’t think I e’er lost to 1 & didn’t know the reason, & didn’t know a way I could avoid it on ’nother try. Mo’ importantly, they’re quick-paced & don’t make you wait through long invincibility periods ’tween hits, like the average Rareware boss.

I think there’s something wrong in the world when I have to compare Ed, Edd ’n Eddy: Jawbreakers! favorably to Donkey Kong Country.

Granted, some o’ the later bosses don’t make much sense. Why the Eds stand round for a while dodging screwdrivers ’stead o’ just leaving for the Sarah boss is ne’er ’splained, nor why Kevin decides to give you a ticket ’cause he fails to get Eddy Tincture dirty.

E’en stranger, the final boss is probably the easiest in the game. You expect it to be some big showdown; but you just have to dodge some flying kisses to grab an item, & then ram 1 o’ the Kankers with a wheel barrow. After that, you’re pretty much guaranteed success.

I have mixed views ’bout the sounds o’ this game. The game uses voice clips from the show, kind o’ like Simpsons games oft do, which is nice. The music, however: though it fits the show’s themes, they can become repetitive & headache-inducing, amplified by the length o’ this game’s levels. You have no idea what a breath o’ fresh air ’twas to finally beat the playground world & not have to listen to that bloody twang music.

As for the writing o’ the cutscenes ’tween worlds & bosses, it’s quite bad. It’s like a bad knock off o’ actual scripts from the show. Part o’ the problem is that the text boxes make it feel sluggish, which is awkward compared to the rather fast pace o’ the actual show’s dialogue & action. O well: it’s not too bad, & a’least the main plot fits the subject matter.

Also, the characters’ dialogue portraits don’t change to reflect what’s being said, leading to absurd situations where someone’s grinning stupidly while their dialogue is obviously unhappy.

1 cool thing ’bout this game is that it has a level-select code hidden in it, which not only lets you skip to any level, but also to any cutscene & boss battle — which I definitely didn’t use to get most o’ these screenshots after I became too tired from the slog that is the playground world to finish the woods world. I should point out that I do faintly remember beating this game a long time ago when I was young, but can’t remember much ’bout the actual experience.

E’en the credits matched the show’s credits, which was a nice touch.

Posted in GBA Tribute, Video Games

An Inquiry into the Proposition in Regards to Economics Utilizing Programmic Language ( or: Economists Should Use Programming Languages ‘Stead o’ Math Language )

A common criticism gainst economics is that it uses incomprehensible math language to describe itself, as if that’s the true reason a bunch o’ rich academics prefer philosophies that benefit rich academics. ‘Cause we know from the Tea Party Movement that plain ( AKA sloppy ) language ne’er leads to sloppy economics ( i.e. economics I don’t believe in ).

Mo’ wary economists acknowledge that math language isn’t necessary for economics, but has 2 benefits:

  • It’s mo’ rigorous than plain language, & thus harder to make invalid statements ( though it’s still possible — not to mention that this does nothing to protect gainst inaccuracy ).

  • Economists being, well, economists, can understand it better than your human language with all its gooey emotions.

There’s something to say ’bout the 1st point. Austrian-schoolers famously claim that math language isn’t necessary ( though can’t argue why it’s necessary not to have it ), & then hurt their cause by having a much sloppier logical system1 with vague language, logical jumps, & outright inaccuracies ( despite Mises’s claim that praxeology only makes abstract logical statements )2.

So I’m recommending a different solution: replace math language with programming language. Economists can’t claim the 1st point gainst this solution: the fact that computers can run off programming language is proof that it’s mathematically rigorous. But I’d also argue that it’s much mo’ readable than math language, if done right.

Indeed, unlike math, programmers take the readability o’ code very seriously. This is ’cause o’ a fact ’bout programming that most people probably don’t realize: that it’s aimed @ writing for humans, not computers. This makes sense: programmers rather quickly realized that they can create computer programs — “compilers” or “interpreters”, depending on how it’s used — that can translate text into machine code.

Now, this obviously has limits.3 ‘Cause human languages are vague, plain English can’t be used; but different languages heavily inspired by English can be used, albeit with much stricter grammar & diction rules than human languages.

Keynes.js

I’ll use Keynes’s General Theory as an example, since ’twas what 1st inspired this view. Keynes, like any economist, loves incoherent math formulae. I’ll go through its primary flaw: wording.

Calculus has this odd pattern o’ using single letters, or e’en Greek letters, to represent concepts & values & a letter plus a letter in parentheses afterward to represent functions. This has greater advantages than being incomprehensible to anyone who doesn’t memorize them: they’re also super hard to position & configure on computers. ¿Isn’t smothering characters in some big E with angled ends — called “Sigma E” — much mo’ elegant than boring ol’ “function SumOFunctionOutputsFromInputInterval( first_number, last_number, function )”.4

It’d be nonsense to argue that economists can’t use words ’cause they’re too vague, but that they can use just letters & symbols, which are e’en less meaningful. The fact that computers can run logically-consistent programs with words proves that economics can, too, so long as it uses these words as precisely & consistently as programs.

The trick is to set off variable names ( function names should already be easy to distinguish from plain English ), — maybe bold them — define them precisely when 1st using them ( in programming, we call this “initialization” ), & ne’er use them for anything else. Don’t use them in the description text @ all; treat doing so as trying to create ‘nother variable with the same name, which would create a compilation error.5

To give an example, let’s take the formula from the beginning o’ Book III o’ General Theory:

Cw = χ(Yw) or C = W * χ(Yw)

I want to point out that this formatting in my copy is so bad that I’m not e’en sure if I got this formula accurate. I’m not sure if that asterisk is s’posed to be there or if it’s some obscure math meaning ( using the same symbol for different functions is less common in math than one might expect from such a rigorous science ) or if it’s just a printer smudge. It’s slightly off-center, which is suspicious. Also, Keynes just mashes “I can’t believe it’s not χ” & the parenthetic expression next to it to form multiplication earlier, ¿so why not just mash W & χ together?

Basically, I’m going to want to append this image next to Keynes’s formula:

Yeah, this is called a “coding horror”. If you click that link you may see an article that proves that, though economists should talk like programmers, programmers probably shouldn’t talk ’bout politics, ’cause they might look silly ( yes, I could totally imagine a programmer with no experience in politics winning a local election based purely on his disgust with the current president — as if that’s a rare commodity — & his inability to tell that election system from Stack Overflow )6. Anyway, this icon is actually from a book called Code Complete, by some other guy & is used to set out particular awful pieces o’ coding, much as blogs set out particularly awful wording with bold. I’d recommend reading that book, since it talks ’bout the comprehensibility issues I’m talking ’bout in greater depth. I’d recommend Clean Code & Cleaner Code e’en mo’.

Anyway, let’s make this fomula not suck:

Let’s start by noticing that these 2 formulae are probably the same, ‘cept spelled-out in needlessly opaque ways. Cw is “consumption based on `wage units'” Let’s ignore that the “propensity for consumption” is apparently based mainly on lowly wages & just focus on translating. C is just “consumption”, & is = to the same thing, but multiplied by uppercase W. If one reads “The Choice of Units”, which I don’t recommend, one will learn that W is — surprise — “wage units”, which I believe is the average wage money per worker. ( I just know it’s some form o’ “wages” / some # o’ workers. Keynes is terrible @ specifying domains, but common sense tells me he’s talking ’bout a country’s economy. Since none o’ this is backed by any evidence or data, it doesn’t matter anyway. It could apply to the Gusty Glade Galaxy for all we care. ) So… basic math tells us that Cw = C/W. So, Cw must be average consumption per average wage.

Thus we have our 2 functions:

function AverageConsumptionPerAverageWages( χ, Yw )

function TotalConsumption( average_wage, χ, Yw )

Already, things are looking much mo’ coherent.

Thankfully, these 2 functions share the same 2 variables. As it turns out, I realized that these weren’t 2 variables being multipled together, but 1 other function with Yw as an argument. These are the kind o’ parsing errors you still have to look out for in programming. For instance, in C++, it’s still possible for a compiler to mistake the initialization o’ a variable through parentheses with the initialization o’ a function.

So… ¿I guess Cw & C are variables to functions? Good thing that works perfectly for JavaScript:

var AverageConsumptionPerAverageWage = function( Yw ) {};

var TotalConsumption = function( average_wage, Yw ) {};

Let’s just appreciate how much easier it is to understand the word “function” o’er a cheap knock-off version o’ the letter “χ”.

Now we just need to figure out Yw. I’ve figured it out: it’s “income in terms o’ wage units”, which is a weird way o’ saying “income per wage unit”, which is a weird way o’ saying “income per average wage”.

Thus, now we have:

var AverageConsumptionPerAverageWage = function( income_per_average_wage ) {};

var TotalConsumption = function( average_wage, income_per_average_wage ) {};

Note that average_wage & income_per_average_wage could be described as functions, too:

var AverageWage = function( total_wages, total_number_of_employees) {};

var IncomePerAverageWage = function( total_income, AverageWage ) {};

Now, we still need to define the implementation o’ these functions. We already know AverageWage & can easily discern IncomePerAverageWage through that:

var AverageWage = function( total_wages, total_number_of_employees )
{
    return total_wages / total_number_of_employees;
};

var IncomePerAverageWage = function( total_income, average_wage )
{
    return total_income / average_wage;
};

Thus, we’d call IncomePerAverageWage thus:

var income_per_average_wage = IncomePerAverageWage( total_income, AverageWage( total_wages, total_number_of_employees ) );

In contradiction to my core claim in this article, there’s a difference ‘tween total_income in this function call & in the function definition earlier. In programming, this is known as “scope” ( sort o’ like my namespace point made in a footnote down below ). The total_income in the function definition only exists for the duration o’ that function call & is set to whatever is pushed to it through this call. This call, meanwhile, references a specific variable whose scope we’ll deal with later.

Anyway, we have 2 mo’ functions to define:

var AverageConsumptionPerAverageWage = function( income_per_average_wage )
{
    return income_per_average_wage;
};

‘Course, this 1 is pointlessly redundant ( & a wrong assumption ).

var TotalConsumption = function( average_wage, income_per_average_wage )
{
    return average_wage * income_per_average_wage;
};

Interestingly, we could redefine AverageConsumptionPerAverageWage in a ( slightly ) mo’ meaningful way.

var AverageConsumptionPerAverageWage = function( total_consumption, average_wage )
{
    return total_consumption / average_wage;
};

‘Course, comparing these 2 functions & understanding basic math will allow one to see that total_consumption / average_wage will inevitably = income_per_average_wage — which is, ‘course, the whole point ( mo’ on this later ). That average_consumption isn’t a particularly meaningful value — better median_consumption — is beyond our scope.

Here we can see all the pieces together:

var TotalConsumption = function( average_wage, income_per_average_wage )
{
    return average_wage * income_per_average_wage;
};

var AverageConsumptionPerAverageWage = function( total_consumption, average_wage )
{
    return total_consumption / average_wage;
};

var AverageWage = function( total_wages, total_number_of_employees )
{
    return total_wages / total_number_of_employees;
};

var IncomePerAverageWage = function( total_income, average_wage )
{
    return total_income / average_wage;
};

var total_income = 16770; // In billions. // These 2 must be
var total_wages = 157.5; // In billions. // in the same unit.
var total_number_of_employees; = 124.73    // In millions.

var average_wage = AverageWage( total_wages, total_number_of_employees );
var income_per_average_wage = IncomePerAverageWage( total_income, average_wage );

var total_consumption = TotalConsumption( average_wage, income_per_average_wage );

console.log( total_consumption ); // Prints 16770 to browser debug console.

Mo’ Fun

You’ve probably noticed by reading the comment after the final statement or running this code yourself ( you can make the debug console pop up in most browsers by pressing F12 ) that total_consumption = total_income. While just following the logic o’ the functions & understanding basic math shows this, familiarity with economics & basic pattern-recognition was mo’ an asset.

But with programming languages, we have 1 tool we can use to test this a lot: conditionals.

To simplify, let’s wrap up the code outside o’ functions in the previous program into 1 big function & have it return a value:

var TotalConsumptionFromIncomeWagesAndEmployees = function( total_income, total_wages, total_number_of_employees )
{
    var average_wage = AverageWage( total_wages, total_number_of_employees );
    var income_per_average_wage = IncomePerAverageWage( total_income, average_wage );

    return TotalConsumption( average_wage, income_per_average_wage );
};

This’ll abstract ‘way all these connections so we don’t have to go through them ‘gain.

Let’s add 2 mo’ functions. The 1st is a simple helper function:

var RandomNumber = function()
{
    var MAX = 99999999999999;
    return ( Math.random() * MAX );
};

JavaScript’s built-in random function is odd: it returns a random # ‘tween 0 & 1. This function increases that to 99.9… trillion.

The next function is the main focus o’ this program:

var TestThatConsumptionEqualsIncome = function( iterations )
{
    var total_income;
    var total_wages;
    var total_number_of_employees;
    var total_consumption;
    
    var consistent = true;

    if ( isNaN( iterations ) ) // isNaN: Not a #
    {
        iterations = 999; // Default
    }
    
for ( var i = 0; i < iterations; i++ )
{
    total_income = RandomNumber();
    total_wages = RandomNumber();
    total_number_of_employees = RandomNumber();
    
    total_consumption = TotalConsumptionFromIncomeWagesAndEmployees
    (
        total_income,
        total_wages,
        total_number_of_employees
    );
        
    if ( total_consumption != total_income )
    {
        consistent = false;
    }
}
    if ( consistent )
    {
        console.log( “¡Our math formulae are pure!” );
    }
    else
    {
        console.log( “¡Economics is a failure! ¡Abort!” );
        SmashCapitalism();
    }
};

1 major flaw o’ JavaScript is its lack o’ argument defaults ( values that the argument becomes if nothing is sent to the function in its place ). This is bewildering, since just ’bout every language has them, including the languages that were JavaScript’s main inspiration.

In this case, the need to manually check for a given argument isn’t too bad, since we need to ensure that it’s a #, anyway — which can’t be done automatically without static typing.

Anyway, now we just need 1 statement @ the end:

TestThatConsumptionEqualsIncome();

Run & let’s see the magic:

Math is a lie.

( Also, Firefox shows a hilarious depth o’ social knowledge with that line, “ReferenceError: SmashCapitalism is not defined”. )

All right, calm down. I tested this program a bit & realized that a’least 1 kind o’ math is a lie: floating-point #s. Try to ne’er use floating-point #s if you can; they can’t seem to understand such obscure, arcane concepts o’ equality. Looking @ the values gotten, total_consumption & total_income vary by .00000000001 or so. But e’en if they didn’t, they could fail equality, ’cause floating-point #s. This is the case wherein JavaScript’s loose typing is a pain — just like how I have to be careful doing math in Python so it doesn’t try to trick me into thinking 8 / 5 = 1. In C++ or Java I wouldn’t have this problem, ’cause they demand you specify the type. Then ‘gain, C++ also automatically converts types without you knowing, so it kind o’ sucks, too.

The problem is, trying to fix this is mo’ complicated than just wrapping Math.round() round every division. In my tests, ’twas strikingly common for these divisions to give 0 values ( which makes sense, since it’ll be common for the values to be close ‘nough that division would give some value below .5 ) & when a # was divided by 0, which every mathematician knows is kosher, it gives “Infinity”. & when that’s multiplied, we get “NaN”. In that case, we’re guaranteed to get an economic disaster, since NaN isn’t equal to anything — e’en itself. Now, this is what I call a well-designed programming language.

Obviously I can’t just do bounds-fixing for 0, since that would change data, which could cause values to go out o’ sync & cause the same capitalism-destroying problem. Also, fixing our “model” by just “fixing” the data is both hilariously wrong & yet hilariously right for an economist.

Thankfully, I have a much mo’ elegant way to move the goalposts — 1 that’s, if I say so myself, much saner: we’ll just change the definition o’ “=”:

var AbsoluteDifference = function( one, two )
{
    return Math.abs( one – two );
};

var CloseNough = function( one, two )
{
    // I said, “¡Hey! ¿Are we doing government work here?”
    return AbsoluteDifference( one, two ) < 1;
};

By the way, if you e’er hope to get a job programming, I highly recommend you fill your functions with silly comments that reference songs & memes & stuff. I can guarantee your boss’ll think you have the utmost professionalism.

Interestingly, the new ES6 standard apparently has some Number.EPSILON variable that is s’posed to be used for comparing floating-points, rather than using a better # system. ‘Cept, that # doesn’t seem to work with my program ( probably ’cause o’ all the divisions that lead to further impurities ).

& now we change change the conditional statement:

if ( !CloseNough( total_income, total_consumption ) )
{
    consistent = false;
}

Let’s see how it works now:

( Holds breath ).

¡Capitalism is saved!

¿Why’d I waste my time on this horse-piss ‘gain?

Posted in Politics, Programming

Mario vs. Donkey Kong

Mario vs. Donkey Kong is ’nother game I neglected to write ’bout.

It’s based on the Game Boy Donkey Kong, — or “Donkey Kong ’94”, as we say in Rogueport — which was amazing & underrated: it’s a puzzle platformer wherein each level is split into 2 parts: in the 1st, you need to grab a key & bring it to the locked door, as in “Donkey Kong ’94”. In the next, you need to grab the toy Mario. ’Long the way there are a red, blue, & yellow present; collecting them all gives one a bonus that allows one to get extra lives & bonus points. Beating the level score nets one a star, which can unlock new levels.

Its story is Nobel-Prize worthy, told through the advanced art o’ slideshows o’ prerendered CGI screenshots in pixelated glory. DK, while sitting @ home watching TV, sees a commercial for Mario toys & decides to bust into Mario’s factory, fill burlap sacks with them, & flee, only for Mario to chase right ’hind. That this plot is essentially the reversal o’ Donkey Kong Country’s plot is a clever quirk on DK’s character that the developers probably hadn’t considered. Why Mario owns his own factory is ne’er ’splained, any mo’ than Mario’s occupation as a referee or a cake-factory worker.

I love puzzle platformers, & this game is full o’ clever puzzles with fun mechanics, such as the red, blue, & yellow switch blocks, which permeates levels throughout all the worlds, & yet ne’er feels tired, e’en by the end. I also like how the theme o’ red, blue, & yellow seeps throughout so much o’ the game.

The level themes are rather clever: the 1st world isn’t a bland grassland, which isn’t in this game @ all, but a toy factory; the final world, meanwhile, isn’t some fiery world, but a cool, night-time city. E’en the volcano theme is made mo’ interesting by putting it midway through the game, rather than the end, while the forest world is the penultimate, both somewhat like Donkey Kong Country 2.

The graphics fill me with nostalgia, e’en if they’re hilariously tacky in their attempt to emulate 3D graphics on a 2D system, ’specially with the clunky voice clips they just loved to use on the Game Boy Advance. In general, Mario vs. Donkey Kong’s aesthetics scream early-2000s Game Boy Advance, which makes it fitting for the final game I’m examining in my GBA tribute.

The game’s also full o’ levels — ’gain, without feeling like it has padding. In addition to the 6 worlds o’ 6 levels, plus a Mini Mario stage & boss, there are 6 extra worlds & 12 “expert” levels that can be unlocked by earning stars in each level through beating the high score & getting all the presents.

A minor problem with this game is that the controls & physics are somewhat clumsy, unpredictable, & choppy. Mario sometimes can’t decide whether he wants to stop on a dime ’pon letting go o’ a direction button or continuing to slip off the platform into a garden o’ spikes. Sometimes he decides not to jump when I press A. Sometimes he can’t manage to jump o’er a single block. He’s also finicky ’bout picking up keys or moving on conveyor belts, & in 1 level, ’twas inconsistent on whether he could throw a key up through conveyor platforms, so much that I @ 1st thought you couldn’t till I tried half a dozen times. Also, Mario can only seem to throw keys upward if he’s not moving horizontally @ all, regardless o’ whether you’re holding up — & that’s the most consistent, & thus least terrible part. In ’nother level, Mario would always grab a vine or monkey tail just by jumping into it, ’cept for 1 time I tried while jumping toward 1 o’er spikes.

Worse is the fact that this game can be anal ’bout the high scores in some levels needed to get 100% ( though other levels aren’t ) . Both these combined lead to hours o’ frustration & cursing Mario to the rashy bowels o’ the hellblizzards.

Also, while the puzzles are clever, sometimes the levels are designed to waste time, which can lead to tedious waiting if you have to redo a level. 3-1 makes you wait a while after getting to the key for the platform to slowly return to you, after rising & falling a few times ’long the way. I’ve ne’er been able to figure out a way to skip the wait. Half o’ 3-6 is just waiting for the lava to slowly fall so you can reach the bottom, only to quickly hop up minutes before the lava would e’er come close to climbing back up to you. I’m not sure what they were thinking with that level: it’s mind-numbingly easy & just makes you wait a long time. ¿What’s the point? 4-5 has an awful Thwomp that it seems like you can pass under him @ 1st; but the right corner o’ him will just smash you if you try. However, you can, if you’re daring & impatient, super somersault ( back flip jump & jump ’gain just after landing ) o’er him while he’s on the ground; though I’m not sure if that actually saves time, & can be finicky to time.

In general, I’m mixed on the involvement o’ the Mario toys in this game. While I like the aesthetics o’ them & the toy factory, & the story is refreshing compared to “villain kidnaps woman, Mario must rescue her”, they don’t have a good effect on gameplay. Mixing the key-&-door mechanic from the Game Boy Donkey Kong & the mechanic o’ just grabbing the toy in 2 half-levels spliced together feels forced, ’specially since the 2 half-levels rarely have anything to do with each other; & the key-&-door mechanic was much mo’ interesting. I’d prefer it if this game kept Game Boy Donkey Kong’s method o’ just 1 level per level, get the key to the door, & collect the 3 items on the way.

Interestingly, the extra levels combine them in a way: there’s a Mini Mario with a key that you have to lead with you to the locked door. But that has the following problem:

That problem would be escort missions, which you have to do before every boss & during the extra levels. The 1s before the boss have you lead 6 o’ the toy Marios to the toy box, collecting the letters that spell out “TOY” ’long the way. The problem is the same o’ every escort mission: they’re e’en mo’ finicky ’bout following my lead than Mario himself, & their “Hey, Mariooo” makes me want to destroy them. Why developers continue to put in such an obnoxious mechanic that, as far as I know, nobody likes, is beyond comprehension. Why DK wants these annoying toys is a mystery, as well.

Worse, you have to do this escort mission perfectly ’gain if you get hit e’en once gainst the boss1, if you want the high score. Each hit gets you points, & you can only get all the hits if you beat the escort mission beforehand.

As for music, while TV Tropes claims its music is great… Well, they say all music is great, so that’s meaningless. I ne’er found any o’ it memorable. Certainly none o’ it comes close to the amazing music in the Game Boy Donkey Kong.

¿Apparently the ghost house songs are particularly good? I kind o’ liked the 3rd theme. It’s no “Fight Against a Stronger Monster”, — or e’en a “Showdown at the Tower” — but it’s all right.

’Cause o’ its superior controls, physics, music, & mo’ refined gameplay, I’ll have to judge the Game Boy Donkey Kong to be superior to Mario vs. Donkey Kong. That said, e’en if you’ve already played the Game Boy Donkey Kong, I’d still recommend this game.

Also, our heroes are assholes.

Posted in GBA Tribute, Video Games

Debunking the Linguistic Rule Against “Mo’ Unique”

It’s truly the greatest threat to our present society — much mo’ than Hairpiece, fascist corporatism, or Google searches that give me stupid listicles ‘stead o’ useful info.

A common grammar “rule” is that unique can’t be modified with words like “very” or “mo'” ’cause “unique” means “1 o’ a kind”.1 E’en in the comments o’ that page people hand-wrung ’bout how it’s been used fore’er, & 1 person argued that everything could be described as “unique”.

Oddly, I have the opposite conclusion: the word “unique” has no logical meaning ’cause nothing could truly be described as “unique”.

¿Want proof? ¿Can we describe something with English words? Then it can be put in a set o’ multiple things that can be described with English words, & therefore can’t be “unique”, ’cause it shares something with an infinite # o’ other things. The paradox o’ “unique” is that if it’s possible to describe something as “unique”, then by definition, it can’t be. It’s like the sentence, “This sentence is false” or, inversely, a set o’ all sets that don’t contain themselves.

If one were to argue that “unique” only means 1 o’ some kind, not all kinds, then the argument that “unique” can’t be modified is obviously false: something that is 1 o’ a kind in mo’ kinds than something else is unquestionably mo’ “unique” than that something else. ‘Course, “kind” is so vague that there could be infinite #s ( indeed, a kind is a thing itself, which should please Lisp fans immensely ), & thus it’d be impossible to test all o’ the kinds something could be ‘lone in, & thus it’d be impossible to prove that anything is mo’ “unique” than anything else; but we’re simply talking theoretics, not facts.

A better grammar rule is to avoid the word “unique” ’cause it invokes a different bad habit o’ writing: sensational language & o’eruse o’ superlatives &mash; ‘specially since it’s so oft invoked in a narcissistic way to describe oneself. After all, there’s nothing mo’ trite than calling oneself unique.

Posted in Literature Commentary

The World’s Worst Review in which I Disagree with Its Conclusion ( How Not to Write a Review: Lessons from Gather Your Party )

Actually, sadly, this negative review o’ Wario Land 3 isn’t as bad as the positive one I made fun o’, since this writer actually managed to consistently follow his thesis.

Still, his arguments are shallow, so let’s take the effort to defend this 10+-year-ol’ game.

This reviewer argues that Wario Land 3 is not only bad, but apparently the prime example o’ a bad sequel. Wario Land 3 must have some fundamental flaws to warrant that particularly shameful spotlight.

1 ) Don’t repackage old mechanics as new

It doesn’t.

He complains that Wario Land 3 is a “step down” from Wario Land 2 simply ’cause it makes you learn your abilities by collecting treasures, rather than starting out with them. Nowhere does he actually state how this affects how fun the game is; he just seems to imply that mo’ is always better. In particular, he compares Wario Land 3 negatively to Banjo-Tooie, which started Banjo & Kazooie with their abilities from Banjo-Kazooie & gave them new abilities in addition to these. What this reviewer doesn’t mention is how many people panned Tooie for being o’er-complicated & giving Banjo & Kazooie a lot o’ abilities that were rarely used & rarely interesting — such as picking stuff up with a backpack & sleeping in it to gain health.

While he compares Wario Land III to Zelda games, he forgets to also mention Metroid & Castlevania games, as well as many RPGs. ( ¿Thousand Year Door makes you recollect badges you got in the 1st Paper Mario? It’s obviously inferior to Paper Mario. ) This is a common gameplay mechanic in video games. It’s true that it doesn’t make sense from a story point o’ view; — so much that it’s a common trope: “Bag of Spilling” — but when you get to the point o’ criticizing a Wario game for not being logical, you’ve become the illogical one.

Moreo’er, he ignores the fact that the game does do new things with Wario’s powerups. Wario not only unlocks the ability to swim, but also the ability to swim past currents, which Wario ne’er learns in II & which dynamically changes how players interact with level design. This is a vital aspect o’ Wario Land III vs. Wario Land II: the way Wario’s interaction with levels changes as the game goes on. In Wario Land II, once you’ve gotten the 1 or 2 exits in a level & found the bonus thrown in, you’re done — nothing new to get from that level.

But, all right, this is just 1 point. I’m sure he has many other good reasons.

2 ) Expand on old mechanics to improve them, and/or create new ones

The example I just gave before is ne’er addressed. Nor does he mention the key-&-chest system, — you know, the main mechanic o’ the game — the day-&-night system, the way levels change as you venture through the game… It almost makes me wonder if this person e’en played this game.

OK, now, ¿what does he talk ’bout?

Wario Land 3 not only goes backwards in terms of Wario’s moveset but ruins one of its strongest, most most defining features, the No Death system.

That’s interesting, since Wario Land 3 clearly still has this system, as well as status effects. Don’t tell me he’s actually going to complain ’bout the “Game Over” on the final boss, as if that matters…

In Wario Land 2, Wario loses coins instead of health when attacked, in addition to being knocked back. These coins are used to pay for minigames which reward the player with treasure when won.

( Smacks forehead. ) ¿’Cause Wario doesn’t lose coins, the “No Death system” is ruined? ¿Is this guy high?

Ironically, it just so happened that I was thinking ’bout the changes ’tween Wario Land games & thought to myself how Wario Land II didn’t do the “No Death system” as well as Wario Land 3 ’cause it made you lose coins by getting hit, thereby losing the neutral aspect o’ getting hit. What — to me, a’least — made the “No Death system” work so well was that it changed the very meaning o’ getting hit: it wasn’t just something that was “bad” & “to be avoided,” but something that varied by context. It meshed well with status effects — effectively treating getting “hurt” as just ’nother status effect, which could be bad or good ( speedrunners actually intentionally get hurt sometimes ), just like status effects. This is good, ’cause for some, it can be hard to tell the difference ’tween getting “hurt” & being hit with a status effect. I saw 1 person once complain ’bout this uncertainty for Wario Land 4, & I’m sure it’d apply to Wario Land II, just to a much smaller degree, since losing coins isn’t that big a deal in Wario Land II.

Interestingly, there is 1 case where I think Wario Land II was better than Wario Land 3: the fact that coins were mo’ common & had mo’ importance ( though not as much as in the 1st Wario Land ). While I think, in general, Wario Land 3’s level design was much mo’ interesting than Wario Land II’s ( I can barely e’en remember its levels, whereas I can remember so much from 3 ), I do miss the coin caches hidden round its levels.

¿Why do I say this is “interesting”?

Arguably this increases the importance of coin collection, but each try at the minigame costs only 10 coins, and since Wario cannot lose any collected coins, the increased importance of coin collection becomes overshadowed by these other factors, which greatly reduces Wario Land 3’s difficulty in comparison to Wario Land 2.

Anyone who is actually familiar with… any Wario Land game, marvel @ this.

  1. Minigolf games only cost 10 coins @ the start. Later on they cost up to 50.

  2. Minigolf games are a thrown-in mechanic that aren’t important @ all. You could take them out & the game would be just as good — perhaps better, since that game gets tiring after a while. Actually, if he mentioned the minigolf game itself as a downside, I might agree with him, ’cept for the fact that Wario Land II’s bonuses were e’en worse.

  3. He essentially argues that coins are mo’ important in Wario Land 3 ’cause there’s fewer o’ them, & notes that they’re also used less oft. Any rational person would conclude that, in such case, coins are obviously less important.

  4. He’s arguing that the difficulty ’tween Wario Land II & 3 is determined by how many coins one has. Yes, the 1 thing that stops one from beating Wario Land 3 isn’t Wolfenboss or the cloud jumps in “S6 Above the Clouds”; it’s running out o’ coins & not being able to play minigolf, &, bizarrely, not being able to just go round killing enemies & breaking blocks till one has ’nough. That’s not hard: that’s tedium.

The same applies to Wario Land II. Money is ne’er a problem in that game, e’en if you get hit all the time. If you think that’s what makes that game hard, & not the bosses or level design… You must be some idiot savant. ¿Do you get hit by every enemy & not collect any o’ the hundreds o’ coins lying round?

The level of punishment lost by removing the element of Wario losing coins when attacked turns Wario Land 3 into an upsettingly easy game. Wario Land 3 goes backwards instead of bringing new things to the table.

( Laughs. ) Wario Land 3 is “upsettingly” easy ’cause it doesn’t make you grind for coins ’nough. I particularly love how “punishment” is a good thing in a video game.

¿What does any o’ this have to do with “bringing new things to the table”? ¿& should someone who uses a cliche like “bringing new things to the table” be complaining ’bout a lack o’ originality?

3 ) The sequel should stay true to the series, but stand out

This is meaningless & likely self-contradictory. What any individual considers to be “true” to a series varies; & if something stays too “true,” it’s certainly not going to stand out much.

He just shows a bunch o’ videos & claims that Wario Land 3 is just like Wario Land 2, ’cept for the changes he mentioned earlier, which is Wario having to learn his powerups, the minigolf game, & there being fewer coins. No mention is given to key-&-chest mechanic, day-&-night mechanic, or music coins.

I have a feeling this guy’s only experience with these games are these YouTube videos.

He then contrasts Wario Land 3 with the way Zelda does everything different in every new game.

If I want a game with more emphasis on puzzles, I’ll play Oracle of Ages, if I want a game with more emphasis on narrative I’d play Majora’s Mask.

Those are such bad examples to give that I almost think he’s intentionally trying to be stupid as a joke or something. Oracle of Ages is certainly mo’ similar to its twin, Oracle of Seasons, & Majora’s Mask literally reuses assets from Ocarina of Time, which also focuses on story. I’m not saying they’re the same — but they’re certainly closer than Wario Land 3 is to Wario Land II. So this guy hasn’t played any o’ those games, either.

A successful sequel is hard to make, especially when following a very well-received game. Wario Land 3’s mistakes make it the poster child of all the mistakes that can be made in making a sequel. And without a successful sequel, a franchise is doomed to fail.

Too bad Wario Land 3 didn’t just come out last year & the series didn’t continue for a few mo’ games afterward. Wario Land 3’s such an amazing failure, it ruined the franchise while still allowing it to continue being successful for years afterward.

In the comments, after some dumb commenter asked if he should only get Wario Land 3 if he got all 4 o’ them… e’en though you can’t get 4 on the 3DS, ’less he was an Ambassador 5 years ago, which is unlikely… But whatever. He says this:

Playing Wario Land 3 after 2 is like playing Spyro Enter the Dragonfly after playing Year of the Dragon

I remember how Wario Land 3 was full o’ game-breaking bugs that happened all the time & took fore’er to load ’tween levels.

Popping the Party Balloons

While looking round the site, I noticed the dumb tagline, “Honest Game Journalism” — as if I’d expect them to have a tagline that said, “Game Journalism that Lies Straight Into Your Fat Face.” They didn’t succeed @ that goal, considering this review’s inaccuracies in regards to… well, every game mentioned, actually. But, still: if you have to emphasize your “honesty,” no rational person would trust that tagline, anyway.

In April of 2012, Gather Your Party launched as an alternative source of video game related media. Its creation was a direct result of the growing discontent with the behavior of major outlets across the internet.

Sigh. It’s ’nother 1 o’ these groups, sticking it to the evil large corporate video game websites that nobody cares ’bout. ’Cause being told a shitty game isn’t shitty is right up there with The New York Times lying ’bout what “torture” is. Ne’er mind the fact that everyone just gets their opinions o’ video games from full playthroughs by some pastyfaced nobody on YouTube — kind o’ like this reviewer clearly did for Wario Land 3 & II.

Due to our pro-consumer stance and desire to pursue ethical video game journalism, it is our policy to disclose information pertaining to possible conflicts of interest, such as when we receive review copies, or when a member of our staff has personal or professional ties to a developer or publisher.

I love how they promise to mention when they got free gifts, & not promise to, you know, not accept them.

I’m glad they promise to tell me ’bout personal ties to developers. I expect you to tell me all ’bout this reviewer’s steamy sex antics with the whole development team o’ Wario Land II so I can make up some online club & go round acting like a belligerent asshole to strangers ( so, Friday night, basically ) & add the word Gate to my name, ’cause that’s original. We’ll call it WarioLandGate, & it’ll be super important. This is ’bout corruption, after all. Whatever that means in this context.

Embarrassingly ’nough, the latest news story from this impressive game news site was from July 2015. Most o’ the stuff they’re doing now is streaming & podcasts, which have the double benefit o’ being hipper & lazier. & useless when there’s much better stuff round. The editorials they do have are nothing mind-feeding. ¿Did you know that Mighty No. 9 sucks? Well, Gather Your Party told you all in a tone as if this is some revelation. The “humor” is trite pop-culture references, like “which video game celebrity will die,” “waifus,” & spelling “video” “vidya.” The website design is so sickeningly slick that it screams o’ “CONVERTING” templates.

Basically, I can’t help get the feeling that this website was made mo’ to generate cheap hits, rather than to actually provide quality info or entertainment. Shocking then that I found it on Google — they’re usually so good @ ensuring these sites are made for me, not them.

Posted in Reviewing Reviews, Video Games

The Double Standards o’ Hairpiece-Apologetic “Leftists”

It’s ironic that Our Grand Lord Keynes has the gall ( & silliness ) to rave ’bout the “the horde of deranged, lying liberal and leftist media” like the conspiracy theorist he is when he himself is conspicuously silent ’bout Hairpiece’s proposal to increase military spending, despite LK praising Hairpiece for being s’posedly anti-militaristic, unlike the vile harpy Clinton, nor any talk o’ Hairpiece dismantling Obamacare & making it harder for poorer people to afford health care, despite his praise for Hairpiece s’posedly once supporting single-payer health care. Indeed, e’en in that article where he talks ’bout the mo’ pressing issue o’ the brown peoples raping our precious white women, he ignores Sweden’s point ’bout Florida being much mo’ violent than Sweden.

Then ‘gain, we could chock all o’ this inconvenient evidence as just being a conspiracy o’ the “lying leftist” media. ¡How much mo’ convenient it is to be sure o’ one’s arbitrary beliefs when one can just unconditionally cut out evidence that doesn’t fit our conclusions just by labeling it “leftist” & calling it “lies,” without any evidence.

Also, a digression, but I’m getting kind o’ annoyed @ the double standard people apply to the lord & savior o’ milquetoast liberals who want to fashion themselves as “rebellious” by tipping their tobacco pipes toward obscure econonobabble that nobody cares ’bout, Steve Keen. Everyone praises him for predicting the 2008 economic collapse, despite everyone who wasn’t in denial being able to, but don’t mention him being consistently wrong ’bout some imagined upcoming collapse. ¿Remember when he said economic collapse was coming in 2016? Well, it didn’t come close, but it’s totally gonna happen, just wait. ( Then ‘gain, considering the clod we have as president now, maybe that’ll be true in the US. ) ¿Isn’t this what people mock crazy Marxists for? They constantly predict that capitalism will collapse, ¡& then 1 day out o’ thousands something disastrous happens! ¡That’s proof that it’s inevitable! It seems that Keen can “win” simply by always predicting trouble & then point @ the rare times he’s right as evidence, conveniently ignoring all the times he’s wrong.

But, see, his are based on made-up assumptions that Keynes made, rather than made-up assumptions that Marx or Friedman, so it’s OK. Ne’er mind the ridiculous assumptions Keynes made. For instance, in General Theory, Keynes bizarrely argues that higher unemployment leads to higher real wages ’cause o’ “the increasing marginal return to a given capital equipment when output is diminished” [ p. 10 ], which is technobabble for “let’s assume that greater efficiency leads to lower prices ’cause o’ simplistic supply-&-demand that doesn’t apply to the real world.

Hilariously, just before this, Keynes writes, “It would be interesting to see the results of a statistical enquiry into the actual relationship between changes in money-wages and changes in real wages.” Yes, ‘twould be interesting to see someone back up their bizarrely counter-intuitive assumptions on actual data. Maybe next century.

Now, see, if Keynes were a “neoclassical”, we would rightfully criticize him for his simplistic assumptions & silly simple math games to prove arbitrary, tautological points. But Keynes is a “genius”, so it’s OK for him to be tautological & apply made-up assumptions.

But a’least Grampa Keen wore his best Hell’s Angels leather jacket for his patreon video. I hear if you donate a’least $50 Australian you get access to a video o’ him holding up “the horns”, as they call it in the down under the sickness, & croon out a wicked rendition o’ “Welcome to the Jungle.”

Also, ¿why still no mention o’ Keen’s best theory: the “Solar Theory o’ Value”?

Posted in Politics