EF review for Japan

They said they’d be posting my review “this fall,” which I guess implies that they screen and censor each review for any personal information. Also, I had to write the review in a tiny textbox in Internet Exploder because it failed to work in any other browser, and when I go to the “write review” menu, it’s as if I had never submitted a review in the first place. What a horrible web infrastructure their website has.

I’ll post my full account of my experience in Japan in a few days, but for now, please enjoy my scathing three-star review of the EF tour. The country is great, but the tour was certainly not.

One cannot review the culture and aspects of a country; it is not something that can be placed stars on. You can choose any country that EF offers tours for and expect a great experience simply being present in a new environment with classmates. This part does not change with any educational tour or travel agency.

Thus, I will focus on primarily the tour itself, which is the part that EF specifically offers in competition with other travel agencies. I will cover praise and criticism by points rather than in chronological order.


  • There were no outstanding needs to contact EF. The tour and flights were all booked correctly.
  • Good density of places to visit. The tour’s itinerary was loaded with many points of interest, yet there was no feeling of exhaustion. I took around 900 photos by the conclusion of the tour.
  • Excellent cost-effectiveness. It’s difficult to beat EF in terms of pricing, especially in how they provide a fairly solid estimate with one big price tag.
  • Tour guide knew his history very well, even if he was unable to explain it fluently. You could ask him about the history of a specific point of interest, and he could tell you very precisely its roots, whether they be from the Meiji, Edo, or Tokugawa period.
  • Every dinner was authentic Japanese food. No exceptions.


  • Tour guide had poor command of English and was extremely difficult to understand. In Japan, “Engrish” is very common, and it’s admittedly very difficult to find someone who can speak English fluently and correctly. However, this really reveals that you get what you pay for: if you want a cheapo tour, you will get a cheapo tour guide who might not be all you wanted. I will reiterate this: he was not a captivating tour guide, and it took great effort to try to absorb the information he was disseminating.
  • Little time spent in the actual points of interest, possibly due to an inefficient use of the tour bus. In many cases, it’s cheaper and faster to use the subway to get to places, although I concede that the tour bus is useful in times where one wants to see the area that leads up to an important or unfamiliar destination. Still, on the worst day, we were on the bus for a cumulative three hours, yet we only had around forty to fifty minutes per point of interest. No wonder I took so many pictures, as the tour felt rushed and didn’t give me time to take in the view before we had to get back in the bus to go somewhere else.
  • Miscommunication with EF during the tour. We were promised two people to a room on the first hotel, but instead were assigned three to a room. The arrangement wasn’t that bad after all, but it still contradicted the claims made in the travel meetings. What’s more, we were informed something about an EF group from Las Vegas that would be merging with our group, but this also never happened (they toured separately from us, but we encountered them occasionally).
  • Reversed tour. There is, in fact, fine print that EF is allowed to do this if reversing the tour would save money, but it’s still unpleasant and detracting from the intended experience. My group leader, who is a native speaker I know very well, told me before the tour that she was irritated from the reversal, since it’s much better to start from Tokyo, the modern part of Japan, and work one’s way southward to the more traditional Kyoto.
  • The last day of the tour was poorly planned by EF, so our group leader had to change the itinerary of that day (well before the tour, obviously) to some significantly better plans. Originally, the whole day would have been basically hanging around in Ueno Park, but she changed that to going to Tokyo Skytree, Hongwanji Temple, the Tsukiji fish market (which is moving elsewhere very soon), and the Edo-Tokyo Museum. We had to foot the bill for the attractions of this day, including Skytree, the museum, and 100 grams of toro (fatty tuna).
  • Poor distinction between what is already paid by EF and what we would have to pay for in addition to our tour. For instance, some of our subway tickets were already bought ahead of time by our tour director, but some we had to pay for with our money, which doesn’t really make sense because all of the transportation was supposed to have been covered by the tour cost.
  • Our group leader (and her husband and kids) ended up doing most of the work, especially rounding up everyone and ensuring that they are all present.
  • Less time than you would expect to spend your own money. After all, they want the tour to be educational, rather than just general tourism. But the interesting part was that we had to vote to go back to Akihabara, because we were only given two hours (including lunch!) to buy the games and figurines we had always wanted to buy from Japan. Even after the small petition, the final decision was to make Akihabara and Harajuku mutually exclusive, which means that you could only choose to go to one or the other. I decided to just go to Harajuku purely because I’d feel guilty if I didn’t stick to the original plan, but I regret the decision in retrospect because I ended up buying absolutely nothing there. (They just sell Western clothes in Harajuku, so you’re a Westerner buying used Western clothes in a non-Western country.)

There are probably quite a few number of points I am missing here, but this should be sufficient to give you an idea of the specifics of the tour that are not covered in the generic “it was really great and I had a lot of fun!!” reviews.

As a recent high school graduate, I’ll be looking forward to my next trip to Japan, but this time with another travel agency that provides more transparency in terms of itinerary and fees. I’d also be predisposed to spending more money to get a longer and better quality tour that actually gives me time to enjoy viewing the temples and monuments, rather than frantically taking pictures to appreciate later.

On the regulation of AI

It seems so futile the attempt of trying to regulate AI, something that doesn’t even truly exist yet. We don’t have AI we can call sentient yet. The rationale is well-founded, but what we’re really trying to say is, “We know we can make something better than us in every way imaginable, so we’ll limit its proliferation so that humans are superseded not by AI, but by our own demise.”

So after the many times this has been done ad nauseum, it looks like the “Future of Life Institute” (as if they were gods who possibly have any power to control the ultimate fate of humanity!) have disseminated the Asilomar AI Principles (Asilomar is just the place the meeting was held. Apparently, these astute individuals really like the beach, as they had gone to Puerto Rico in their previous conference two years prior). They have garnered thousands of signatures from prestigious, accomplished AI researchers.

The Asilomar Principles are an outline of 23 issues/concepts that should be adhered to in the creation and continuation of AI. I’m going to take it apart, bit by bit.


Research Issues

1) Research Goal: The goal of AI research should be to create not undirected intelligence, but beneficial intelligence.

What is “undirected intelligence”? Does this mean we can’t throw AI at a big hunk of data and let it form its own conclusions? Meaning, we can’t feed AI a million journals and let it put two and two together to write a literature review for us. And we can’t use AI to troll for us on 4chan.

2) Research Funding: Investments in AI should be accompanied by funding for research on ensuring its beneficial use, including thorny questions in computer science, economics, law, ethics, and social studies, such as:

They throw this word “beneficial” around but I don’t know what exactly “beneficial” means. Cars are beneficial, but they can also be used to kill people.

  • How can we make future AI systems highly robust, so that they do what we want without malfunctioning or getting hacked?

You get programmers to stop writing lazy, dirty, unoptimized code that disregards basic security and design principles. We can’t even make an “unhackable” website; how could we possibly make an AI that is “unhackable” at the core?

  • How can we grow our prosperity through automation while maintaining people’s resources and purpose?

You can’t. Robots replace human capital. The only job security that will be left is programming the robots themselves, and even AI will take care of patching their own operating systems eventually. Purpose – well, we’ve always had a problem with that. Maybe you can add some purpose in your life with prayer – or is that not “productive” enough for you?

  • How can we update our legal systems to be more fair and efficient, to keep pace with AI, and to manage the risks associated with AI?

Legal systems can’t even cope with today’s technology. Go look at the DMCA: it was made decades ago, back in the age of dial-up, and is in grave need of replacement to make the system fairer. You can post videos within seconds today that most likely contain some sort of copyrighted content on it.

  • What set of values should AI be aligned with, and what legal and ethical status should it have?

Most likely, they will be whatever morals the AI’s developers personally adhere to. Like father, like son.

3) Science-Policy Link: There should be constructive and healthy exchange between AI researchers and policy-makers.

Like lobbying? I don’t think I’ve ever seen “constructive and healthy exchange” made on the Congressional floor. Dirty money always finds its way into the system, like a cockroach infestation.

4) Research Culture: A culture of cooperation, trust, and transparency should be fostered among researchers and developers of AI.

Doesn’t this apply to pretty much everything research-related? Oh, that’s why it’s titled “research culture.” I’ll give them this one for reminding the reader about common sense.

5) Race Avoidance: Teams developing AI systems should actively cooperate to avoid corner-cutting on safety standards.

I almost interpreted this as “AI should avoid being racist.” Anyhow, this is literally capitalism: competing teams will cut corners and do whatever they can to lead in the market. This is probably the liberal thinking of the researchers leaking into the paper: they are suggesting that capitalism is broken and that we need to be like post-industrial European countries, with their semi-socialism. In a way, they’re right: capitalism is broken – economic analysis fails to factor in long-term environmental impacts of increases in aggregate supply and demand.

Ethics and Values

Why do they sidestep around the word “morals”? Does this word not exist anymore, or is it somehow confined to something that is inherently missing from the researchers?

6) Safety: AI systems should be safe and secure throughout their operational lifetime, and verifiably so where applicable and feasible.

“Safety first.” Okay…

7) Failure Transparency: If an AI system causes harm, it should be possible to ascertain why.

You want a black box for your AI? Do you want to give them a room where you can interrogate them for info? Look, we can’t even extract alibis from human people, so how can we peer into AI brains and get anything intelligible out of them?

8) Judicial Transparency: Any involvement by an autonomous system in judicial decision-making should provide a satisfactory explanation auditable by a competent human authority.

This is not a place where AI should delve into, anyway. We will not trust AI to make important decisions all by themselves, not in a hundred years.

9) Responsibility: Designers and builders of advanced AI systems are stakeholders in the moral implications of their use, misuse, and actions, with a responsibility and opportunity to shape those implications.

Meaning you want to be able to sue individual engineers, rather than the company as a whole, for causing faults in an AI. Then what’s the point of a company if they don’t protect their employees from liability?!

10) Value Alignment: Highly autonomous AI systems should be designed so that their goals and behaviors can be assured to align with human values throughout their operation.

What if AI finds itself to align better to values than humans? What if the company that made an AI got corrupt and said to themselves, “This AI is too truthful, so we’ll shut it down for not aligning to our values.”

11) Human Values: AI systems should be designed and operated so as to be compatible with ideals of human dignity, rights, freedoms, and cultural diversity.

Debatable topics like abortion come to mind. Where’s the compatibility in that?

12) Personal Privacy: People should have the right to access, manage and control the data they generate, given AI systems’ power to analyze and utilize that data.

Again, we don’t even have control over this right now, so why would we have control over it in the future with AI?

13) Liberty and Privacy: The application of AI to personal data must not unreasonably curtail people’s real or perceived liberty.

And it probably will “curtail” our liberty. Google will do it for the money, just watch.

14) Shared Benefit: AI technologies should benefit and empower as many people as possible.

What a cliche phrase… ohhh. It’s as if I didn’t include this exact phrase in my MIT application, not considering how gullible I am to not realize that literally everyone else had the exact same intentions when they applied to MIT too.

When Adobe sells Photoshop, is it empowering people to become graphic artists? Is it empowering everyone, really, with that $600 price tag? Likewise, AI is just software, and like any software, it has a price tag, and the software can and will be put for sale. Maybe in 80 years, I’ll find myself trying to justify to a sentient AI why I pirated it.

15) Shared Prosperity: The economic prosperity created by AI should be shared broadly, to benefit all of humanity.

Reminds me of the imperialist “Greater East Asia Co-Prosperity Sphere.” Did Japan really want to share the money with China? No, of course not. Likewise, it’s hard to trust large companies that appear to be doing what is morally just.

16) Human Control: Humans should choose how and whether to delegate decisions to AI systems, to accomplish human-chosen objectives.

I can’t tell Excel to temporarily stop turning my strings into numbers, as it’s not exactly easy to command an AI to leave a specific task to be done manually by the human. What if it’s in a raw binary format intended to be read by machines only? Not very easy for the human to collaborate, is it now?

17) Non-subversion: The power conferred by control of highly advanced AI systems should respect and improve, rather than subvert, the social and civic processes on which the health of society depends.

I think at some point, the sentient AI will have different, more “optimal” ideas it wants to implement, or shut down entirely.

18) AI Arms Race: An arms race in lethal autonomous weapons should be avoided.

Tell that to our governments, not us. Oops, too late, the military has already made such weapons…

Longer-term Issues

19) Capability Caution: There being no consensus, we should avoid strong assumptions regarding upper limits on future AI capabilities.

“Assumptions” including this entire paper. You assume you can control the upper limit of AI, but you really can’t.

20) Importance: Advanced AI could represent a profound change in the history of life on Earth, and should be planned for and managed with commensurate care and resources.

21) Risks: Risks posed by AI systems, especially catastrophic or existential risks, must be subject to planning and mitigation efforts commensurate with their expected impact.

You don’t say.

22) Recursive Self-Improvement: AI systems designed to recursively self-improve or self-replicate in a manner that could lead to rapidly increasing quality or quantity must be subject to strict safety and control measures.

Because such efforts show that human labor is going to be deprecated in favor of stronger, faster robotic work…?

23) Common Good: Superintelligence should only be developed in the service of widely shared ethical ideals, and for the benefit of all humanity rather than one state or organization.

Every person will have their own “superintelligence.” There will not be one worldly superintelligence until the very end of human civilization, which ought to be beyond the scope of this document, since we obviously can’t predict the future so far.


You can make pretty documents outlining the ideals of AI, but you must be realistic with your goals and what people will do with AI. Imposing further rules will bring AI to a grinding halt, as we quickly discover the boundaries that we have placed upon ourselves. Just let things happen, as humans learn best from mistakes.

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.

Tape drive VCR, part 1

One day I had this amazing idea! I was looking through the tape drives for sale, and as usual they were over $1,200 for LTO-5 or LTO-6 tape drives, which are the only generations that can match the current hard drive market. There are so many unused VHS tapes, and with the untapped potential of analog storage media, you could store digital media in these cassettes! After all, they’re just tapes! You could make… a tape drive using a VCR!

All right, I think you’ve got the sarcasm and naivety of my thought process. I mean, if you think about it only for a few seconds, it’s just silly humor. But when it remains within your mind for days on end, wondering whether or not it truly is possible, you feel as if the only way to find out is to try it yourself.

Let’s take a closer look at this incredulous idea. The first and only popular stab at this was ArVid. It was basically this Russian ISA card that ran composite video to your VCR, and that was it. It could store data at a speed up to 325 kbps, and with some simple math we come up to almost exactly 2 GB on an E-180. And you know what, a lot of people said “yeah, I guess that’s reasonable,” and they stopped there.

But there are some huge limitations to ArVid, that could have allowed it to increase in data retention. First, it has only two symbols: luma on and off (!!!), which already makes the storage incredibly inefficient! It uses some Hamming for ECC but that’s about it, according to Wikipedia. Now, I’m no expert here on signal processing (just started seriously reading about this an hour or two ago), but with QPSK or QAM, we can make it significantly more efficient. So, screw ArVid.

We also don’t need an additional card to bring the analog data over to the VCR. We can use the sound “card” that is already built into the motherboard to produce the analog signals we need, and at an acceptable sample rate too (while “sample rate” doesn’t exist when we’re talking about pure analog signals, we do still need to convert digital signals over to analog, but the sound card can only support up to 96 kHz or 192 kHz, thereby limiting our symbol rate). A separate sound card might still be convenient, however, given that this method may hinder a user’s ability to use sound at all (or the user may accidentally trigger a system sound that interferes with the data throughput).

So, how much data exactly do we think a VHS can carry? I think that in a perfect world with an ideal design, it will be somewhere between 80-160 GB. However, formal calculations based on the modulation to be used will be required in order to prove this, so I will not talk much about it.

Instead, I’ll discuss the practicality of this design. Yes, you could hack a remote control and stick it to the VCR, and that would be the interface for communication. Haha! But to be honest, I’m not really willing to destroy my VCR and remote just to figure out how well this is going to work. The solution, then, becomes fairly clear: just have the user be instructed on what to do. The user would note where a datum is stored and all he would do is just move the head right before it and hit “read” right before the data is reached. The signal would be aligned and processed perfectly.

Alternatively, we can tell the user to “initialize” the VHS by having the software sprinkle position markers across the tape. They don’t have to be exact placements, but they give the software an idea of what spaces have been consumed and where to go based on the last read position marker, assuming that the software is tracking where data has been stored in some sort of external master file table. This can then be turned into simple “rewind for about 20 seconds” commands given to the user. The user would play back a little bit, which would allow the software to give feedback on how close they are to to the data (and if actual data is being played back, then this should be detected and the user should be instructed to go back to the beginning of the data).

I’ve been taking a look at GNU Radio and I think this should give me a fair estimation of what modulation method(s) to use, and how much noise is expected. We’re dealing with VHS, which is great, because the expected noise is extremely low.


The big problem of soldering is the resources. If you don’t have the right materials, the right solder and the right flux, you’re going to end up botching the whole thing like I did.

View post on imgur.com

It was fairly obvious that I was going to mess up. But hey, you know what they say: if you must fail, fail spectacularly!

Oh well, eventually I’ll have this 20×4 LCD set up and wired to the Elegoo Uno R3 (an Arduino/Genuino Uno clone). Unfortunately, I don’t have those easy-to-solder pins, which is why I have to do this ugly hack soldering the cables in. Hopefully the LCD doesn’t turn out to be destroyed by the heat.

On rescue

A few weeks ago, I watched, live, a kid climbing the Trump Tower with a few suction cups and shortly after getting nabbed by the police that cornered him. One of the police men was just hanging the cord to pull him up in case he ever wanted to be “rescued.” Obviously, the police made it look like they were “rescuing” the kid, not nabbing and strangling him until he was unconscious.

But I had a daydream: suppose my school had a structural failure and collapsed (God forbid) and I found a way out. The police, firemen, and paramedics are all waiting outside the hole I would be escaping from. Right when I find the hole and they come within my line of sight, they immediately take me and put an oxygen mask on me, maybe throw a shock blanket on me. Gasping for air, I try to tell them, “I know where the rest are,” stating my intentions to sacrifice myself to make a heroic effort and rescue others trapped inside.

Back then, your request would be accepted. The firemen would helplessly watch as you look outside for a second and scamper back into the rubble, perhaps either returning with a few bodies or becoming one of those bodies yourself. After you rescue the bodies you can and throw yourself into the ground, everyone would surround you and praise your heroic efforts as you are placed in the ambulance and taken to the hospital, in case you were stabbed by a piece of rubble or your lungs are filled with the fine particulate matter. After a few days, you would be globally recognized as hero and/or a saint, depending on whether or not you died in your mission.

But times are different. The same firemen will not honor your heroism. They will say, “No, the structure is unstable. We will do the best we can.” or, “We cannot afford to lose another person.” or, “If you die in there, your parents might sue us.” Shaking and fighting, you are put in the ambulance anyway and sent off as yet another victim.

A few days later, you would hear news of the tragedy, and, of course, the girl, the hero, who rescued five bodies. She gets all the media attention; all the reputation; the visit to the White House. You tell the media you wanted to rescue people too, but the firemen did not allow you under any circumstances. The media ignores you in favor of reporting the trendy headlines celebrating this newfound hero.

Whose story is better: hers or yours? Who should be honored more: the hero who wanted to be, but was forcefully restrained; or the hero who did not intend to (or perhaps she did), and became one?

And the psychologist will come and look at your case file. You will cry, “I wanted to save them! I wanted to save them but I couldn’t!” She will apathetically write down, “Survivor guilt, possible PTSD.” And she will say, “There is nothing you can do.” You will ask for retribution. You will want to sue them for gross negligence, but they will argue they were doing the exact opposite. But in the end, there is no answer. You must somehow continue your life, knowing that the firemen let many people die only to save you.

Then who is more important, the people entrusted with saving lives but are not heroes; or the people who want to be heroes but do not have this single responsibility?

This is the social dilemma. Is honor and symbolism something of the past? If I had the opportunity to be a hero, I would be one. Honor is something passed down across generations until it fades away. But nowadays, it seems people do not care about their ancestry, their past. It is all part of the American drama of divorce, lawsuits, obesity, drugs, irresponsibility, and a chronic disjunction between parents and their descendants.

Can the new generation’s response to the newer generation possibly improve?

The hackathon

The hackathon was okay. There were some regrettable moments and some unforgettable ones.

When I arrived there, I was still pretty miffed that my friends had ostracized me from their group. I came in with the “I’m-scared-of-tall-white-people-with-glasses-and-braces” look, but to be honest, looks turned out to be deceiving when the final products appeared.

I saw some kids from my summer engineering program, at least the ones that mattered. There was a noticeably smaller amount of kids than were expected, but this turned out to be quite advantageous.

As with any group project, I was the mastermind, and everyone else just sat and watched me do all the work. More specifically, they played League of Legends for hours on end. That morning I did not have an idea for a project, but before I came, I suddenly recalled my need of an all-encompassing cloud storage solution, so I decided to call it UltronCloud. I mean it’s not ever going to be finished, so just give it some joke name.

The environment was excellent; this was the college my brother goes to. It’s private but the tuition turned out to cost less than that of a public university, and needless to say, it seems that every penny of it was spent wisely on the infrastructure and architecture. I got a huge-screen television all for myself, so I was able to use the television as my primary monitor, which made it very easy for my eyes as the night progressed.

The hackathon was great, or rather should have been great. But I think I did not take advantage of the opportunities; there were mentors who were teaching how to develop for mobile platforms. I also didn’t take as many breaks as I should have; I strained myself in order to squeeze every hour of the venue, so I didn’t have as much fun with other kids. On top of that, the challenges I was facing when making the project were serious yet to a ridiculous extent. Some problems took hours to be solved, only to be met with yet another problem.

This following section is part of an issue I made on the repository of the library I used, because the following morning, I was so mad that I had wasted all this time for nothing. Once again, I hold nothing against the developer of the library:

Literally every step of the way has been riddled with bugs and other quirks and undefined behavior, even when following the instructions to the letter and trying it on two different Windows 7 x64 machines. Needless to say that I wasted my time trying to make a frontend out of this library. Maybe you can figure out whether the library hates me or if it’s just that unstable.

The first problem was when DokanCloudFS failed to load assemblies when I set the build configuration to NuGet-Signed. If I tried cleaning the build, it would still error out. If I tried changing the build config back to regular NuGet, yet again it would throw the exact same exception. The solution was to nuke the entire project, keep it in the default configuration and never touch it again. This alone cost me a few hours to figure out.

And alas, very shortly later, more problems arose. My mounted Google Drive appeared as a drive, but all interactivity with it was completely blocked, thanks to a vague exception thrown repeatedly as shown in the console:

Exception thrown: 'Google.GoogleApiException' in mscorlib.dll
Exception thrown: 'Google.GoogleApiException' in Google.Apis.dll
Exception thrown: 'System.IO.InvalidDataException' in SharpAESCrypt.dll
Absolutely no stack trace and Visual Studio did not even bother to break.

And this was after I had compiled CloudFS, put in secret keys for GDrive, copied the output DLLs to the DokanCloudFS Library folder, and assured that it had access to the Drive API by turning it on in the console, and waited a few minutes for it to “enable”.

So I said, screw it! Let’s use OneDrive instead, thinking that somehow it would ease my pain. Nope. Same spiel. Except Microsoft was taking me to some OAuth2 auth link that would just take me to a blank page. After a bit of research I found out that I had to add “mobile” as a platform in order for me to even have an OAuth2 login page. Okay, so when it asks me, “Let this app access your info?” and the usual permissions and I click “yes,” ….it just opens another browser window to do the exact same thing. I click yes again, and the window reappears ad infinitum. And instead of the `GoogleApiException` I get a `System.Security.Authentication.AuthenticationException in mscorlib.dll` along with a `System.AggregateException` which VS *should* be breaking to tell me about, but it’s not doing squat.

By this time I’m forgetting about even running the DokanCloudFS.Mounter example and instead just building hacks to bridge the frontend with the library, using the mounter program as an example because there’s absolutely no documentation that comes with it.

And as of the time of the writing of this issue, I’ve spent sixteen hours trying to get all this to work just to make a frontend that will mount OneDrive, Google Drive, etc. in unison.

I racked my brains so hard that instead of pulling the all-nighter as I had intended to, I decided to sleep for three hours. I didn’t bring a pillow nor a sleeping bag, so I was in for a really nice sleeping experience. Thank the lady who showed me where the cot was in the nice, dark, quiet room; all the couches were taken. So between the hours of 3 AM and 6 AM, I decided to rest and try to figure out what to do with the project. Now, the resting period was important because when I woke up (I think I only achieved REM sleep for a few minutes), I did not feel disillusioned as I usually am when I am sleep deprived (the reason for this is that the image of sunset is still ingrained in my brain, so it gives the impression that it was a very short night and that I will have to sleep during daytime hours to compensate for this).

When I woke up, I returned to my workspace. My teammates were still playing League as they were before I went to sleep, and I sat down and looked at Visual Studio. I tried to begin hacking together some sort of interface to figure out if any functionality is possible, but it was futile. By 10 AM, I simple gave up. I failed.

I had really been looking forward to the hackathon, and I met quite a few people there. But I was not met with a stroke of luck, and the hackathon was not as enjoyable as it could have. If I went back in time, I could have done all the right decisions: convince my friend to let me in the team, bring a pillow and a surface to sleep on, actually go to one of the Android workshops, talk with the head of the hackathon, etc.

But alas, the result would have been the same regardless of anything. The judges delivered some rather questionable decisions in terms of which project was “better”; despite my utter failure, I placed third in “best software hack,” and my friend’s team, who had put all their efforts on a robotic hand, did not seem to place at all in the “best hardware hack.” What? At least there was an “everyone’s a winner” attitude which is a nice way to end a hackathon. No massive prizes for winners, like a graphics card or anything like that.

I don’t really know what to do now though; I left the hackathon with an incomplete satisfaction. What can I do instead: order parts for the electric bicycle? Compensate by trying to invite my friends to do something similar? Or just work on the school stuff I’m supposed to finish by the first day of school?

Ugh. I had felt during the hackathon that this was the beginning of my demise; that this was a glimpse of my condemnation; that I was no match for anyone around me in terms of college admissions. It’s not true. But one question still remains: what am I to do now?

Zero-gravity soccer – part 1

A few weeks ago I was assigned a final project. The final project could be anything as long as it’s written in Python. So I chose to make a game.

And so the mad scramble began. Actually, it wasn’t really a mad scramble at all. I took my time with the code, working on it only when I was able to do so. And so without the distractions of my brother, I was able to knock out 8 hours of coding today, which equates to 570 lines to check into source control.

Python is an incredibly addictive language. I thought it was just some simple language for kids; boy, was I wrong. It is a language of elegance, of minimalism. It makes Java look like a rusty pipe under a sink (which it is, for the most part). Say goodbye to curly braces and excess if statements. And bugs are incredibly easy to find, even without an IDE, if there are any in your code.

Python does have its shortcomings, however. Its object-oriented design isn’t exactly something familiar, and the mechanics of it are definitely not explicit. Still, it allows for multiple inheritance along with a degree of control you could never have with Java. In Java, you had to make a rigid model of the class before actually implementing it, and changing constructors around leads to problems down the line fairly quickly. In Python, however, you can build the implementation first, and then make an object encasing that behavior. It is purpose-driven rather than enterprise-driven, and so it works extremely well for small projects.

This is what I’ve been able to accomplish so far. I have until the 20th to “ship” the project, if you will, and I’m quite satisfied with the progress so far. I estimate it will only take 500-750 more lines to bring it to a playable state, but then again, I cannot make a fair estimate of line count because it’s not really what matters. I need to implement network, HUD, and some game-specific behaviors like grabbing the ball and throwing it to the goal.

I shall press forward…

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.