Category: On Anything

On Aseprite

Once upon a time, my uncle wanted to give me Photoshop CS5 4 as a present for my tenth birthday. However, as he did not bring the physical box along with him when he visited (he was a graphic artist at the time), he ended up installing a cracked copy when I wasn’t on the computer. I kept whining that it was illegal, that he couldn’t do that and now there were going to be viruses on my computer, but he explained calmly that there was no other way since he didn’t have the CD with him. So I said okay, vowing I’d uninstall it later, but after a while of using it, it kind of stuck, and no malware appeared (to this day, it is to my surprise how he managed to find a clean copy so quickly). The only condition, as he stated, was that I could not use Photoshop for commercial use – basically, you can’t sell anything you make with this cracked Photoshop. Fair enough.

Even so, I steered away from Photoshop, as anything I made with it felt tainted with piracy. Later, I’d use it a little more, but I placed little investment in learning the software, as I had made no monetary investment in the software at all. I used Paint.NET instead, and despite its shortcomings (no vector mode, no text layers, half-decent magic wand, no magnetic lasso), the shortcuts felt familiar and the workflow remained generally the same as that of Photoshop. People also recommended Gimp as “the only good free alternative to Photoshop”, but I didn’t like Gimp because literally every shortcut is different, and the workflow is likewise totally different. The truth was that Photoshop was Photoshop, and Gimp was Gimp.

Yet I sought to do pixel art. This was supposed to be an easy endeavor, but Paint.NET was an annoying tool. Eventually, I found David Capello’s Aseprite and had no trouble adapting to the software, as it was designed for pixel art.

I had few complaints, but they had to be dismissed; after all, this was software still in the making. Only relatively recently was symmetry added, and the software was made more usable. I also liked its $0 price tag – if you were competent enough to compile the binaries yourself. And because the software was GPL, you could even distribute the binaries for free, even though Capello charged money for them. Capello was happy, and the FOSS community was happy. Some even tried setting up Aseprite as an Ubuntu package in universe, although it generally wasn’t up-to-date, due to stringent updating guidelines.

Until the day Capello decided to revoke the GPLv2. I knew the day was coming and wasn’t surprised when the news came. Plop, the old GPLv2 came off and subsequent versions were replaced with a license of his making, forbidding distribution of binaries and further reproduction. The incentive of making pull requests to add features was gone – after all, you were really just helping someone out there earn more money, as opposed to contributing to a genuine open-source project. Of the 114 closed pull requests, only 7 are from this year (as of the time of writing).

In fact, the entire prospect of Aseprite continuing as an open-source project collapsed, for Capello had bait-and-switched the FOSS community to support his image editor because it was “open source,” without informing clearly of his ulterior motives to drop the license in the future. Licensing as GPLv2 was, after all no mistake as opposed to choosing GPLv3 – perhaps this had something to do with being compatible with Allegro’s license, or more permissibility for other contributors? No. This had to do with a clause that GPLv3 had, but GPLv2 did not: the irrevocable, viral release of one’s code to the open-source realm. Without this important clause, and because he was the owner of the code, Capello could simply rip off the old license and slap on a more proprietary one, which is exactly what he did.

The argument in defense of Capello was, “Well, it’s his software, he can do whatever he want.” After all, he was charging for the program, anyway. But the counterargument is that the GPL is intended by the Free Software Foundation to promote the open-source movement, not to deceive users into thinking your for-profit project upholds the ideals of free and open-source software, especially that open part: free as in freedom, not just free as in beer. Now there is not only a price tag on the product, but also a ban on distributing binaries, thanks to this incredible decision to make more money.

Yes, I know someone has to keep the lights on. You can do that in many ways, but one of them is not by turning your “open-source” project into downright proprietary software. Now, people demand more and contribute less – why should they pay when there are less results and less features being implemented? The cycle of development decelerates, and putting money into Aseprite is now a matter of business rather than a matter of gratitude.

I don’t remember how to compile Aseprite at this point. I remember it being mostly a pain in the butt having to compile Skia, but that’s about it. Thus, I have no more interest in using Aseprite.

Entering college, Adobe is offering absolutely no discounts on its products. It’s almost as if they want kids like me to go ahead and pirate Photoshop again. There is no way I am going to afford a single program with the price of an entire computer. Yes, I know, Aseprite is obviously cheaper than Photoshop, but why should I buy a pixel editing tool when I can get something that can do all kinds of image manipulation?

A slap to the face goes to the general direction of Adobe and David Capello. Good job for keeping the image editing market in the status quo.

On Arduino

This is not intended to be a full explanation of Arduino, but rather an address of some misconceptions of what Arduino is and what it’s supposed to be. I am by no means an expert and I use an Elegoo Uno (which is an Arduino knockoff), because I am a cheap sore loser.

Arduino is intended to be an accessible, ready-to-use microcontroller kit for prototyping. For cost reasons, the designers decided to use an Atmel AVR/ATmega8/168/328(p).

Now that we know this, let’s get into the misconceptions.

“Arduino is Arduino”

Meaning that Arduino is its own thing and you can’t use anything to replace it. No. Arduino is simply a PCB containing:

  • the microcontroller you want to use
  • an accessible way to get to the pins supported by the microcontroller
  • an external clock crystal you can swap out
  • a couple of fuses so you don’t burn your toy out from playing with the leads
  • a USB controller for easy programming (which actually might turn out to be more powerful than your target microcontroller)
  • USB/12V ports
  • Firmware that facilitates easy programming for the target microcontroller

You could rig your own programmer for your target microcontroller, solder everything yourself, but you’re missing the point. It’s for convenience. Any manufacturer can make “Arduino”-like kits and they’d work great anyway.

Arduino IDE is the only way to program the Arduino

Wrong again. This is actually the most rampant misconception out there. Actually, Arduino IDE is a horrible “IDE” if you can even call it that. It is quite literally a Java application with the Processing user interface (because Arduino was taken from Wiring, which in turn was based off Processing). When you compile something, it just executes a preprocessing script that takes your code and slaps on some standard headers, then it invokes the prepackaged gcc that actually does the heavy lifting. When you upload something, it invokes avrdude with the COM port you chose in the context menu and wow, magic!

If you want, you can make your own Makefile or CMake configuration that invokes all of this. I actually recommend this choice, because then you are free to use any text editor of your choice.

Arduino uses its own programming language

“Wow it has classes, it must be Java!” “Hmm, it could be Processing.” Nope, it’s C++. The only thing it doesn’t have are exceptions, and that’s just because the AVR wasn’t designed with any exception handling capabilities at all. So, every time you read an “Arduino Programming Language” tutorial, you’re actually being deceived into writing ugly C++ code. Take a small breath, and realize you’ve been passing your big objects by value instead of by address all along. Use pointers.

ATmega328 is like any other processor, but smaller

Except it’s not. It’s an 8-bit RISC processor with a tiny instruction set with somewhere around 16 MHz of clock speed, which is marginally better than the clock speed on a Zilog Z80. Even with a very powerful language at your disposal, you still have to optimize code.

Anyway, I’m tired and I’m out of ideas for what to write next.

On virtual reality

Many people view virtual reality (VR) – and let’s point out the big elephant in the room, HTC Vive – as “the future that is now.” Then they hype hype hype and buy it. Then they complain that there aren’t enough VR games, that they’re all bad, etc.

But instead, consumers need to look at it from this standpoint: Where were video games at ten years ago? Twenty? Ten years ago we were doing these low-poly games and the best console on the market was PlayStation 2. Increasingly developers understood the architecture more and more and were able to hyperoptimize their games to exploit what the hardware could really do, which still can’t be emulated at full speed today without hacks along the way. Now it’s 2016 and we are seeing Direct3D 12 and photorealistic graphics. No, not FSX “photorealistic,” but as in faces rendered realtime and so humanlike that you couldn’t even tell whether they were fake or real. And in the 90s and 80s, we didn’t even have 3D graphics good enough for gaming, with the exception of some rising consoles such as the N64. And even they were extremely limited in capability.

Thus, I implore consumers not to look at problems in the “now” but in the future. In twenty years we were able to achieve photorealism for realtime applications such as gaming. And now that the whole issue of graphics has been resolved (since any graphics card made since last year is able to render basically anything you wanted on it), we have new issues related to VR, such as wield variably shaped items, move around in a physically confined area (less than 9 m2!), sense their environment beyond sight, interact with the virtual environment? Currently these problems have yet to be solved. But if we literally invented (and perfected) 3D graphics in 30 years – could we not invent and perfect virtual reality in the same amount of time?

And the whole idea of how these problems will be answered frightens me because the solutions might become intrusive. What if in 2030 we simply became accustomed to human alteration? What if 2040 the first human beings entered the long-awaited “dream pods” that would cede their consciousness to the hands of a computer? What if in 2055 we decided to just transfer our entire beings into solid-state drives? What if in 2085 the human race just disappeared from the face of the planet? Soon, virtual reality will become the only reality. And it’s turtles all the way down.

So don’t complain because one day, you’ll miss playing on a monitor.

On computer terminology

I see in many books certain attempts to ease the apparent pains of using computer terminology.

For example:

With the help of Tim Berners-Lee, the Internet became popularized with the creation of the World Wide Web.

This simple statement becomes this convoluted paragraph:

With the assistance of Tim Berners-Lee, a computer technology was developed that allowed computers to communicate each other through what became known as the World Wide Web, which people could connect to through new software such as America Online and CompuServe that came in floppy diskettes. Thus came the existence of the Internet.

Authors continue to be extremely cautious in introducing computer terminology in their writings. But the truth is, who doesn’t know what the Internet is these days? Who doesn’t know what software is? And when authors do use the terminology, they often surround it with these metaphors so as to try to compare it to tasks once done by hand. “The Internet, like a pair of telephone wires, …” “With the advent of the microprocessor, computers once the size of rooms became smaller than the ‘a’ in this book…” This is the virtual world we’re talking about here. There is no substitute for these things.

No. Heck, no. If you’re going to include words like “axle” and “spigot” in a book and don’t bother defining them, then don’t bother with “die size” or “parallelization” either. Suck it up and make people learn the jargon. Don’t talk to them as if they were elderly people.

On Anki: 14 months on

Since January 27, 2015, the first set of cards that I had inputted on Anki, I have learned 550 kanji. No, not just stared at for 5 minutes… LEARNED!

When I first heard about spaced repetition, I thought the forum posts were too good to be true. But they prescribed the same advice: Anki. Anki. Anki. Study every day. Mine the crap out of Japanese and fling it into Anki. And I haven’t had any complaints about the system ever since that day, not because I’m an optimist who only looks at the positive side of “good” things, but rather because it’s (1) a scientifically proven model that accurately works with, not against, the dynamics of the brain, and (2) because once you set it up, you can study from wherever the heck you want. I study on my phone because it’s the most convenient, but I have to input new notes on the computer because it would take an eternity and a half doing it on a tiny phone with an even tinier keyboard.

(more…)

On the current state of learning how to code

Since 2012, numerous organizations have proliferated to teach people of all ages to begin programming. A famous example is Hour of Code.

Back then, when I was eight or so, I did not have those opportunities. You couldn’t Google “programming for kids” and have something more functional than Scratch come up. And Python was not so popular back then, much less geared toward beginners. Consequently, I had to put up with VB.NET until such resources came about, and people actually started caring just a bit about youngsters who wanted to seriously pursue coding.

But after all that – the hours of code have passed, you’ve mastered the docs after poring them over – what now? How would a nine-year-old ever start doing anything more constructive with coding than “Hello World” and bubble sorts and turtles without lurking forums and having some autonomy?

On prodigies and starting things at an early age

Back in the 70s and 80s, we got people who picked up a certain hobby at very early ages. But in this overprotective day and age, the opportunities for such things to be learned so early in life are dwindling, because the means to learn them so early are “more” illegal now, and the systems involved in such hobbies have become increasingly complicated, convoluted, and expensive.

Do you not know how many hobbies have fallen apart due to this? Photography, aviation, ham radio, and heck, even computing. Society tells us that we can’t take pictures without a $600 camera, fly a plane without tens of thousands of dollars just laying around, talk to someone 12,000 miles away without being subject to massive regulation and buying equipment easily worth $1,500, and make a simple program without enclosing it behind a layer of abstraction or reading heavily on an operating system’s API.

Back then, life was much simpler.

I’m not saying that I wish I lived in the nineties, because it had a whole new set of problems; I’m saying that people should have just as many – or more – opportunities now than they did before, despite the necessity for the newbies in life to take more time to “catch up” to mankind’s recent inventions.

Do I have a grandfather who flew planes? No. An uncle who grew up as a hacker, or who enjoyed making games in BASIC or assembly? No. A father who has plenty of money to blow on a hobby? No! Then what the heck am I supposed to do?

There’s one thing you get for free when you live in this universe, and you get it one second per second at absolutely zero cost to you: time. You have 2,207,520,000 seconds available to you during your entire life. Currently, I have used 22.8% of that number. But even then, time is immortal. I may not have the money, but if I just keep working, and working, and working toward a goal related to a hobby, I will come to it. The energy placed becomes purer and purer, because it is not energy due to anger; it is energy driven by passion, but fueled by time, not money.

Therefore, I have come to a conclusion: age does not matter. Its physical effects may place a burden on humans, and the surrounding environment lives on due to (and depends on) time, but such limitations will not last forever. Perhaps one was simply not able to learn or engage fully due to such circumstances and limitations.

But if they do not emerge because they are good at something in particular at an early age, then where will our prodigies emerge from? The recesses of an “even playing field” referred to as standardized testing? Such testing I detest, because it means nothing. It does not test competence in anything in particular, except what you sit down on a desk to do at school: algebra and English. Boring. Where is my multivariable calculus? Where is my C#, my JavaScript, my fluency in Japanese and Spanish, my loyalty, my talent, my devotion to a multitude of things, my passions, my hopes, my dreams and my desires? I do not see them on this multiple-guess sheet; I guess they do not matter nowadays.

At my high school, many are represented: the girls, in dance; the boys, in band and sports; and the programmers and hobbyists and the intelligentsia? Where are we? Do we not do service in our works, helping our classmates in homework? Are we not good enough? Is this a popularity contest? Why are we not respected? Why are we not represented or recognized?

I wish I could say I could go off to somewhere and do great things with people like me. But I can’t. I have to talk to people over the Internet who are twice my age and deal with lowly, average people down here and lowly, average problems.

And now you say the problems rests in my ego? Now I have become the enemy. Nonsense. It is not I who am your enemy; it is my humanness, my mortality, not my soul.

You wanna become a prodigy? You’re a prodigy for finding this blog, congratulations, now go away. You wanted to do C# and not VB when you were nine? Congrats, you did something, now go get a time machine and try to do it better. You wanted to win a contest? Congrats, you won the contest in my book, now burn my book and try 0th place next year.

I hate contests. I hate tests. I hate when people try to judge my life, because it takes away the pride and thus security that I can bestow myself with.

And without security, can you say that such things are really improving our lives?

On the state of Ace of Spades

https://www.rockpapershotgun.com/images/11/apr/spade/ace6.jpg

Once upon a time, Ace of Spades was a really nice game, a crossroads of sorts between Team Fortress 2 and Minecraft (or so they said). Its 90s-style graphics simply made it more appealing to gamers, both hardcore and in those countries that still use Pentium III computers. Ben Aksoy, the really nice guy he was, updated the game twice a week, and in no time we went from 0.15 to 0.75. The forums thrived, new open-source server software was in the works… until the Fire Nation attacked.

(more…)