My take on Android

On this blue moon night, I’ll talk about the Android OS, it’s ecosystem and anything that crosses my mind. Now, before I start, I would like to mention that I love android and have only ever owned Android phones. I also develop for Android and have been for the past couple of years. Anything and everything I’m about to write is my opinion based on my own experience as a user and a developer and you don’t need to agree or disagree with it.

Android

Android is a marvel of engineering of the modern world. Almost everywhere you look, you can find an android powered device be it a smartphone or tablet or watch or TV. The android platform and technology is integrated into our lives. The immense success of android is attributed to it’s open source nature. The entire android OS is open source and runs on Linux, which is also open source. Any random guy can develop a phone and adapt android to run on it. It’s been a few years since it’s conception and has since captured the market and hearts of it’s users. Android has replaced most, if not all, of the legacy OS that were available in the past. Most notably, Symbian by Nokia and the BlackBerry OS. Android has gained it’s popularity by allowing a wide variety of phone manufacturers to modify the OS to their requirements.

In the present market, we can find android phones from dozens of manufactures, featuring a variety of features and specifications. Phones range from budget phones to high end devices with tons of memory and computing power. And, I expect android to only increase in popularity in the foreseeable future.

Android Devices

In the past, when android first started appearing in the market, devices were pretty simple. My very first phone had 512 MB of RAM and a single core processor from Qualcomm. Now, I own a phone with 2 GB of RAM and a quad core processor. Over the years, manufacturers have added tons of RAM and computing capacity to their devices to appeal to their customers. But, in my opinion, a phone does not need 8 GB of RAM and an octa core processor. My laptop has 16 GB of RAM and a quad core processor. The tools I need to get my job done requires tons of RAM and computing power to run. A phone simply does not need to, or rather, can not run anything that would be able to utilize the resources that manufacturers are putting in their phones these days.

Most phones only need to run a few applications and even those don’t need tons of resources to get the job done. Say for instance, on my laptop, I run high resource utilization tools like Eclipse, VirtualBox and other stuff. Other people at my office run photo and video editing suites on their laptop with barely 4 GB of RAM and a dual or quad core processor. And, here’s the thing, a phone cannot possibly run a virtualization stack or a photo editing suite like Photoshop; so, packing 8 GB of RAM and an octa core processor into a phone makes no sense whatsoever. A phone can barely use 2 GB of RAM during normal operations. Putting more resources than can be used is simply a waste of resources that could have been used elsewhere.

Android Technicalities

The android OS is open source and runs on the Linux kernel. The linux kernel made it possible to run android on a wide range of hardware. Most android phones run on some variant of the ARM processor. A small portion of android phones run on the x86 processor. Some phones even contain MIPS processor. Android is able to run on all these varying platform because linux is available for all of these platforms. Since android is designed to run on varying hardware, the creators of android needed a way to make sure that applications can run regardless of the processor. Thus, android programming is done using JAVA. A compiled android application contains JAVA Byte Code that is interpreted by the Dalvik VM or the ART when run.

Using Java to program android enabled developers to forget about the processor their application is going to run on and concentrate on actually developing the application. It’s also a necessity since android is designed to be run on as many devices as possible and all. Making android use java and be cross platform means that the job of worrying about processors and stuff have been moved from the application developer to the hardware manufacturer.

But, there’s a problem with this design choice of the android OS. Using Java means that there is a layer between the application and the hardware. This layer is a source of performance degradation. If I write a piece of code in a native language such as C or C++ or anything, it runs directly on the processor. However, java requires a JVM to run. Thus, the processor runs the JVM which in turn runs the Java code. And no matter how much the JVM tries, it can never match the processor in terms of performance. This is the entire reason that android seems slower and uses more resources to get the same thing done than, say, iOS.

iOS uses the Swift programming language at present. The code is compiled into machine code that executes directly on the processor. This is the entire reason that an iPhone can do the same thing an android can with less resources. JVM brings with it not only a layer of indirection over the processor, it must also perform critical bookkeeping operations that takes up memory and computing resources. If android applications were built and compiled to native code, it would have taken away this layer that serves as a performance reducer. But, this would also bring with it one of the two:

  1. Lock the android system into using a single type of processor. Thereby reducing it’s uptake by manufacturers.
  2. Force the application developer to release multiple copies of the same application for different hardware platforms.

The 2nd option is favored by developers at present. Some applications include a bit of native code to get the job done. Applications like Whatsapp contain a bit of code written in C to get that extra performance when doing computing intensive operations. One way to include native code into applications is by including copies of the code compiled for every possible processor into the application. But, in this case, the application would become extremely large.

Say I have a code that’s 1 MB in size. I compile it for 8 different processors, this makes my application 8 MB larger than if I only compile for a single processor. But if I compile for only one processor, I cannot run it on any other processor. One way to overcome this problem is by using app marketplace that can detect and provide the correct version of the application. I can produce 8 different versions of my application, each containing code compiled for one of the 8 different processors and upload it to a platform that can detect the processor and provide the correct version.

The Google Play Store is capable of detecting and providing the proper version to the user. The user would never notice the difference in the application from one platform to the next. As a developer, I would be more than happy to compile and upload different versions for different platforms if the app store is capable of providing the correct version to it’s users.

Deciding to use Java in the name of cross platform compatibility was a bad design choice in my opinion. A choice that’s extremely difficult to change at this stage. So, we will continue to have phones that cannot compete with iOS in terms of performance and resources used.

My Conclusion

Although android has it’s fair share of bad design choices, it’s the best thing we have at the moment. Until another OS is developed that can overcome the shortcomings of android, it’s very likely that we’ll continue to have android around. And, as it is, getting a new OS to become popular enough to compete with android is going to be extremely difficult given how big the android ecosystem has become. Another option is to gradually deploy a subsystem that would enable developing native application while keeping the java based subsystem in place for legacy applications. Either way, as users, and developers, we just have to wait and watch the path android takes.

Node.js : Why I don’t use it

I have to say this before I get to my main point. I know that many people love Node.js and I don’t hold anything against them. This article is about why I personally don’t like Node.js based on my little experience with it. I won’t say I’ve used Node.js for very long, or that I’m experienced with it. I’ve tried it out on a few different occasions and this article explains my view of Node.js. You do not have to agree on these points.

Node.js

Node.js is basically JavaScript taken to the server environment. For years, JavaScript has ruled the client environment in web browsers. Everything funky happening on a web page is done by JavaScript. From dynamically loading data to animations, everything depended on JavaScript. Then one fine day, someone decided to take the JavaScript everyone (every web developer) loved so much and stick it into the server. Node.js is basically the Google V8 engine with some additional stuff to support server programming. Google V8 engine is the JavaScript engine present in Google Chrome. It soon found a growing user base and is now the favorite platform for developers.

JavaScript on the Client

The client environment is as unpredictable as it gets. With more than a few browsers and operating systems, it’s impossible to get any machine code to run on it; not to mention the security risks of running machine code. JavaScript was a God send to the browser world. With the wide spread support of JavaScript in the early days of the internet, a web developer could write JS and be assured that it would run on most environments. As of HTML5, JavaScript is the only official programming language for the browser. It’s all well and good for the browser because having a single programming language to work across every browser means less pain in the ass for a web developer. We can write a piece of code and expect it to run pretty much the same on every browser.

JavaScript on the Server

JavaScript is a necessity for the browser environment since it provides a way for us to forget all about the unpredictable and uncontrollable client software and code with peace of mind (well, what counts as peace of mind anyway). But move to the server and we have a whole lot of different programming languages for getting the job done. Actually, we can write the server software in C or assembly and the browser would not give a shit as long as the server talks HTTP. So why do we need a new language? Because, all the major languages have been around since the stone age and sticks to old standards. Bringing JavaScript to the server means giving the server something modern to work with. But, the question is, Is that really necessary? The old languages gets the job done good enough and people have a lot of experience with them to begin with. What’s the point of bringing in a new language if it’s meant to do the same thing as every other language that exists currently. There are a lot of arguments on that topic and I’m not going to go to that place here. The fact is, JavaScript exists on the server as Node.js and it’s going to stick around for some time since people are obsessed with how good (in their opinion) it is.

Node.js model

Node.js uses a single threaded “pump” to handle everything. Well, not literally everything since there are other threads that are responsible for IO, etc. Node.js has only one thread that executes server code, code written by us to do stuff. Now, this itself is not the problem, the problem is the baggage it carries with it. A single thread to do everything means we cannot do what we do in every other language without a second thought. Say for instance, we read from the database, do some stuff with the data and send some data to the browser and, optionally, store some data to the database. In a language like, say PHP, we can do that in one sequence like so:

$var = getData(“Some Query”);
$result = processData($var);
storeData($result);
sendData($result);

But, there is a problem with this. When we query the database, we spend some time outside of PHP. During the time the database is processing our query, PHP waits for the result. When the database returns the result, PHP resumes execution. This is all good in PHP since it is multi-threaded in Apache. But, in Node.js, the time spent waiting for the result from the database is wasted since Node is unable to do anything productive in that time, and having only one thread means that a whole lot of stuff may get blocked till the database is done processing. So, in Node.js, we use callbacks for every IO operation. The callback is called when the IO is done and we have a result to work with. So, the same in Node.js, we need to write the same thing like so:

getData(“Some Query”, function(var) {
result = processData();
storeData(result, function() {
sendData(result);
});
});

You may think, this isn’t too much of a problem and you are right, in this case. The problem begins to surface when we need to do a whole lot of IO. Soon we’re drowning inside callbacks, this is known as “callback hell”. Now, every half decent Node programmer will yell, “there’s modules like ‘async’ help with that’. But, that’s not how a language should be. I shouldn’t have to install modules to be able to write decent code. And there’s another problem with such modules that I don’t want in my code. For instance, a sample code using ‘async’ module may look like so:

async.series([
function(callback) {
// some stuff
callback(err, result);
},
function(callback) {
// some stuff
callback(err, result);
}]);

The main problem with this code is passing variables from one function to another. If I’m reading data from multiple sources, I need to explicitly pass the data to the next callback. So, in every function, I need to accept the data from the previous function and pass it on to the next function. This here just created net positive work for me to do and a pitfall for me to fall into. A language or platform should try to reduce the work that I need to do to get it to work. I should not create net positive work or pitfalls for me.

My Conclusion

Bringing JavaScript into the server is all well and good. I don’t have a particular problem with using JavaScript on the server. However, I do have a problem with the extra work that I have to do in order to get the same result as a different language or platform. Also, in Node.js, I have to check for error after every IO operation; this creates a whole lot of work and traps for me as a developer.

I’ve only worked with Node.js very little and so, I don’t have a whole lot of experience with it. As such, I may not be aware of solutions to the problems I mentioned. But, I’ve decided to steer clear of Node.js wherever possible. It’s a personal decision and I’m sticking to it for the time being.

Nothing important

It’s been a while since my last post. I’ve been extremely busy with work and too lazy to write about anything; mostly lazy. It has come to my attention that, while I do have stuff to write about, I don’t have enough time or passion to actually write about anything.

I’ve been busy with a few projects at work. Additionally, I’m in charge of managing the entire technical infrastructure at the company I work for, so that takes up a lot of time outside of work as well. Not to mention the fact that more often than not, my work is delayed by other responsibilities and problems that pop up to make my life difficult.

Anyway, expect to see some posts in the near future, probably. I do have a list of things I want to write about. Maybe one fine day, I’ll decide to write about something here. Keep an eye on this blog just in case.

Copyright Laws

The subject of “Copyright Laws” are a topic of heated discussion in governments and communities since the dawn of time. While I honestly think that copyright laws have good intentions, I believe that they are being abused to make more money for the publishers without any concern for the consumers or a bit of common sense.

The age when copyright laws were conceived was before the digital age. Back in those days, it made sense that I would not like my hard work being copied and me not making some amount of profit from it. But fast forward to today’s digital age and things are a bit different. I’m focusing solely on the copyright of digital things like video games, movies and the like.

While it is true that illegally copying a digital work hurts the developers of said work. I think that they more than make up for it in a few weeks of release of the work. Say that I make a movie by spending 1 million US dollars. When I release it in theaters, I make about 5 million dollars. After a while, I release the DVD edition and make some more money, say about 1 million dollars from the DVD. I think I can afford to have people copying my work after I’ve made 6 times of what I put into it.

Publishers tend to look at copying as someone stealing money from them. But if I copy something, how am I stealing from you when I never gave you the money in the first place. And also, if I copy something, it means that I like it and maybe I’ll be willing to pay for it in the near future. It’s like free advertising just in this case, you’re giving the whole thing for free in order to attract them towards the future works you do.

Take me for example, when I was little, I used to buy games from local shops. At the time I had no idea that they were pirated and the such. But that piracy helped me build an interest in games over the years and now I have a steam account worth a fortune. I even bought old games I liked back in the day just because I think the developers deserve some form of payment for making my life full of fun.

It works in much the same way many people. They may not be willing to pay a large sum up front for something they are unsure of, so they pirate it. Sometimes it’s more of a financial problem, sometimes an availability problem. For instance, Fallout 3 wasn’t released where I live so I had to obtain a pirated copy in order to play. I really liked it so I ordered the DVD when I got the chance to do so even though I completed it long before that.

In the case of any digital work of art, piracy is like free advertising. It brings people closer to the particular series of work and they may be more willing to pay for it in the future. Publishers should not look down upon piracy like they do now. They should be more open to the idea. It’s not like they can completely eradicate it from existence. Piracy will continue whether publishers like it or not. And the amount of money, time and energy put into fighting digital piracy is better put in actual productive work in my opinion.

There’s also the fact that by the time a pirated copy of any digital work is available, the publishers and developers have made more than enough money. Most piracy communities are considerate enough to wait for some time before releasing a pirated version. Even the ones that use pirated copies understand that the developers worked very hard to create something that people like and they should get payment for making people’s lives a little better.

Of course, what I said till now is not completely valid when it comes to productivity and office software. In the case of software, it’s a constant development effort that needs funding to keep going. There’s also the fact that if you’re using such software to make money then you should pay for the software. Using a pirated copy of software, like 3DS Max or Photoshop, is may be acceptable for learning purposes but it’s not acceptable when you’re using it to make money. The developers put a lot of effort into making it and you should pay them back for it. How would you take it if you make something, a useful tool for example, and everyone is using it to make money but you, the author of said tool, is not making a single dollar. If you’re using a piece of software to make money, the developer of that software is entitled to receive compensation for the hard work they put into it. It also allows them to improve the piece of software so you can do more stuff with it.

However, the model that companies use in the case of productivity software also needs a little bit of modification. It’s not a big deal to charge someone for a software if they’re making money by using it. But the same cannot be said for someone learning the software. While some companies like Autodesk and Microsoft have special programs for students, I think the same programs should be applied to anyone willing to learn about the software. In other words, companies should not charge from people not earning money with their software, or, those that are just learning it. Of course, when it comes to non-commercial use, the things do tend to get a lot more complicated but it should be sorted out and software should be made more generally available for use.

So in short, publishers of works like video games and movies should lay off the copyright war and think of piracy as helpful advertising. And, publishers of productivity software should try to be more considerate of people just starting to learn the software. I’m curious to see how long this copyright war continues and who wins, if any side will.

Toradora – review

Toradora

Toradora is a fine anime series about high school life. No the ordinary sort of high school life, but when is high school in anime ever ordinary? Toradora closely follows the life of the two main characters Taiga Aisaka and Ryuji Takasu who happen to be classmates. Also bundled in with the two are their friends Minori Kushieda, Yusaku Kitamura and Ami Kawashima.

The series starts off revealing that Taiga is crushing on Yusaku and Ryuji is crushing on Minori. It so happens that Ryuji is a close friend of Yusaku and Taiga is a close friend of Minori. After getting into some trouble, Ryuji and Taiga agree to help each other reach their love interests. The series follows their life as each try to get the other going with his/her crush but it seems that Ryuji is helping Taiga much more than she is helping him.

After a while, we are introduced to Ami, a childhood friend of Yusaku and the group of four becomes a group of five. At first, Ami comes off as a cold and heartless person with no regard for the feelings of those around her. Also, it is revealed that she puts on a mature face because everybody thinks of her as a mature adult even though she is the same age.

As the story progresses, we see that Ami is starting to develop feelings for Ryuji. She gives it off on multiple occasions but no one around her picks it up. Eventually though, she decides not to interfere with Ryuji’s life and decides not to tell anyone about her feelings.

In the beginning, it seems like Minori is not at all interested in Ryuji. Nearing the end of the series however, it is revealed that Minori does really love Ryuji but is keeping her distance because Taiga needs Ryuji far more than her. Also, at one point, she reveals her feelings for Ryuji, shouting it while running through the school.

Finally, Ruiji and Taiga come to terms with their feelings for one another and almost confesses it but gets interrupted. They decide to run away and Ami, Yusaku and Minori helps them to run away. They go to Ruiji’s grandparent’s house where they meet Ryuji’s mother and come back to their home. At this point, Taiga chooses to leave Ryuji behind to sort out some family problems. The series ends on the note that Taiga also switches school.

If one were to stop watching at this point, it would seem kind of odd and sad that Taiga chose to leave Ryuji. But, at the end of the credits, we see that the two of them are reunited at their graduation day and Ryuji finally gets to confess to Taiga. The series finally ends at this point.

It would seem that the two got reunited and carried forward their plan of marrying. But it’s left to the imagination of the viewer. I certainly like to imagine that they got married and lived a happy life.

Toradora comes to a full closure at the end so I doubt there being a second season. I do however wish that there be an OVA clarifying the events after their reunion. But until then, I’ll keep imagining that they got reunited and eventually married.

Toradora is a fine piece of art and I recommend everyone to watch it. It’s also a good watch for those new to the world of anime and those with a thing for drama. I wouldn’t say that it’s all drama and no comedy but the drama portion sure is weaved wonderfully into it.

Have fun watching.

Your Lie in April – review

Your Lie in April

Your Lie in April is an anime series centered around an aspiring pianist, Kosei Arima, who can no longer play the piano due to a very unique hearing disability, he cannot hear his own playing. Throughout the course of the series, Arima meets and befriends an aspiring violinist, Kaori Miyazono, and learns to play the piano despite his disability. We come to learn about Arima’s childhood, how he inspired several people into music with his piano at a very early age. At-least 3 different people were inspired into music by his playing the piano. We learn that in the beginning, his playing was “magical” and moved everyone. But as he continued to learn under the tutorship of his mother, Arima lost his magic as his mother forced him to play only what is written in the sheet and play it exactly as it was written.

Arima’s mother was suffering from some fatal disease and dies while Arima is very young. Soon after that, he stops playing the piano as he discovers he cannot hear his own playing. Using his disability as an excuse, Arima managed to stay away from the piano although he can never get rid of it completely. In the course of time, Arima becomes friends with Kaori and attends a violin competition she takes part in. He is inspired by her playing and begins to change slowly. Shortly afterwards, Kaori forces Arima to play with her at the second stage of the competition. Although it goes horribly wrong half way through, they manage to put on a spectacular performance.

Kaori manages to force Arima to enter a piano competition, thereby restarting his path as a pianist. At the competition, we are introduced to two of Arima’s rivals, Emi Igawa and Takeshi Aiza, both amazing pianists in their own right. Although Arima is unable to qualify the prelims of the competition, he finds a reason to play the piano during his performance. Arima decides to play for the sake of Kaori and his “magic” starts to return to him. It is later revealed that Emi was inspired to be a pianist by Arima when he played in a recital at a very young age.

After his attempt at the competition, he enters another piano competition where he faces off against his rivals Emi and Takeshi. It is revealed that Kaori suffers from a fatal disease and is hospitalized permanently soon after Arima’s first competition. During the time Kaori is hospitalized, Arima begins to teach a girl piano, it is later revealed that she is the younger sister of Takeshi. During the competition, Arima, Emi and Takeshi becomes very good friends despite their rivalry and helps one another become better.

Nearing the end of the series, Kaori passes away and takes with her Arima’s reason to play. It’s not revealed whether she dies before or after the competition but my guess is the she died before, which is why Arima plays such a sad and lonely song. Before she dies, she leaves a letter for Arima which explains a lot of things that were left unexplained.

Throughout the course of the series, we learn that Tsubaki, Arima’s neighbor and childhood friend, is in love with him. Although everyone else knows about it, the only two people who don’t know it are Arima and Tsubaki themselves. Although throughout the series it was said the Kaori likes Watari, the biggest surprise was yet to be revealed.

The true meaning of the anime’s title “Your Lie in April” was revealed in Kaori’s letter to Arima after she dies. In the letter, Kaori reveals that she was in love with Arima and not Watari. She lied to get close to Arima because she knew that Tsubaki was in love with Arima and also that she does not have much time on her hands. It is also revealed that she was a pianist at first but switched to a violin when she heard Arima play at the recital when they were young. In this way, she could play a duet with Arima on the piano and her on the violin.

At the end of the series, we see Tsubaki confess her love to Arima directly; she did sort of confess her love long before but not directly. It is clear from Arma’s reaction that he also feels the same for her. The series concludes after they promise to be together like they were covered in superglue.

In all, I’d say this is a fantastic series for those who love a bit of drama with comedy. I’d recommend watching Your Lie in April to hardcore fans of anime and those starting out on the road of anime. I personally loved how the series kept us in the dark about the “lie” all the way till the very end.

Your Lie in April is a series with full closure and I do not expect there to be a second season. I would however like to see a few OVAs covering some side stories about the characters or the series in general. I will conclude by review here, and, as always, every anime is great in their own right.

Charlotte – review

Charlotte

Charlotte is a light hearted anime series and a good watch for any time. Nothing bad (except for one permanent death) happens in the series and it won’t too much strain on your tender little heart. I would recommend it for anyone starting out on the anime world. But it’s just as good for seasoned anime fans as well.

Charlotte depicts the story of Yuu Otosaka in a world where adolescent teens have special abilities. Yuu is a part of a group that locates others with abilities and protects them from scientists wanting to experiment on them. In the beginning, it is revealed that Yuu has the power to take over another person’s body for 5 seconds; an ability that is seemingly useless, is revealed to be the most powerful ability as taking over an ability wielder results in Yuu gaining the subject’s ability.

The story progresses fairly similarly in the beginning episodes. The group will go about locating new ability wielders and stop them from using their ability in whichever way they deem necessary. In most cases, the ability is taken away by Yuu when he takes over their body for one reason or another. Some episodes into the series, we see Yuu’s younger sister Ayumi die when her ability becomes unstable. However, a few episodes later, Yuu travels back to the past and saves his sister from that fate. If the effects were permanent, the death of Ayumi could be seen as a tragic event. We see Yuu get his memory, of a life that he lived in another timeline, back (which should be impossible) and find out about his real power (plundering other’s ability). He then meets his older brother, who has time leap and uses his ability to save his sister.

We experience some heartbreaking in the last episode when Yuu, in his mission to save every ability wielder, forgets about everyone. The effect is compounded when he is unable to even recognize Nao Tomori. But the fact that he returned unharmed (other than his memory loss) and that he had the gift Tomori gave him makes us ever so happy. In the end, we see that the whole group is reunited and enjoying the return of Yuu.

In short, Charlotte has a happy story with full closure and we can rest our hearts and minds that everything turned out just fine. Yuu and Tomori is back together, and according to their promise, they are now a couple. I would also imagine that Yusa and Takajou will form a cute couple some time in the future. And, since there are no more ability wielders left, Yuu, Ayumi and their brother Shunsuke would be able to live together as a family once again.

I would like to see an OVA of their lives after the events of the series. But, even if that does not happen, I can have peace of mind that the story has ended in all right and everyone is living a happy life.

The feeling that Charlotte leaves behind is quite different than that of Angel Beats. Whereas in Angel Beats, we are left with an overwhelming heartbroken feeling mixed with happiness; Charlotte leaves us with a general feeling of happiness and fulfillment.

 

Image is taken from the Wikipedia page of Charlotte.

Angel Beats – review

Angel Beats

Angel Beats is an anime that is a must watch for any anime lover out there. It takes one on a very bumpy feels journey through it’s 13 episodes and leaves the viewer in an extremely heartbroken state. Do not watch if you recently had a breakup or anything like that. I don’t judge between different anime and I believe that each and every one is extremely well made and amazing in it’s own right, but I have to say, I really liked Angel Beats. This review is a few years late but meh, whatever.

Angel Beats starts off pretty abruptly. Otonashi wakes up with an amnesia and he finds Yurippe who asks him to join her battlefront. The viewer, at this point, will scratch their heads and try to make sense of what’s going on, just like Otonashi does. Also, a lot of background information is missing in the first few episodes but one gets a general idea pretty soon. The first 2 episodes are fairly normal, just like any other anime. We get an idea of some of the character’s past. Yurippe’s past is the most disturbing of all the characters whose past has been revealed in the anime. By episode 3, the big feels guns are pulled out with Iwasawa disappearing at the end of the episode. Although we were not given enough time to get attached to Iwasawa up to the extent where we would feel really bad though.

Soon after the disappearance of Iwasawa, we are introduces to Yui, actually, at the very beginning of episode 4. Her first impression was not as effective as one might expect but, time has it’s way of changing things. I was happy to see Kanade being accepted as a friend by the battlefront despite the past differences.

Soon after Otonashi gets his memories back, he vows to put everyone at ease with their past. At first, this doesn’t seem like a very bad idea. They were all stuck there because they weren’t at ease with their past. What’s the harm in helping everyone attain peace with their past one would ask. The problem becomes apparent once Otonashi actually manages to complete Yui’s dreams and put her to rest. We experience the first major heartbreak in the series with Yui disappearing from the world. By this time, we had more than enough time to form a strong attachment with Yui and the circumstances of her disappearance combined with the song at the end of episode 10 is enough to put anyone into tears. FUCK YOU FEELS. I’M A MAN. A MAAANNN I TELL YOU.

From this point, the series becomes somewhat fast paced and we see some combat with “ghosts”. Nothing very special happens from this point till the end of the series. The ending puts us all in an extremely high speed feels train. The feels go from being very happy for the 5 remaining members to extremely heartbroken in about 30 seconds. At the end of the series, after Yurippe, Hinata and Neoi have left, we see Otonashi confess his feelings for Kanade. (Note: We are still feeling somewhat happy at this point despite seeing 3 members disappear.) At this point, Kanade reveals that she’s here to say thank you to Otonashi for giving her a heart and allowing her to live longer. This is where we board the mother of all feels train and witness Kanade reveal her feelings for Otonashi and then disappear, leaving behind a crying Otonashi. (Note: We are extremely heartbroken at this point). The series seemingly ends with Otonashi staying behind. It’s not until after the credits and the song (don’t listen to the ending song of the last episode if you don’t have a box of tissue nearby. And, again, I AM A MAN.) It’s at the very end that we find out that Otonashi did pass on at some point after the events of the episode. This is indicated by him disappearing from the group the last and after some delay. Also, after the credits end, we see a reincarnated Kanade and Otonashi walk past each other and Otonashi seem to recognize (for lack of a better word) Kanade by the song she’s humming (“My Song”, Iwasawa’s last song).

The ending of Angel Beats was particularly sad, however, we do get some comfort from the fact that all of them passed on and was at ease with their past and that Otonashi and Kanade were given a chance to live a life together. I would also like to think that Hinata and Yui were also given that chance and all the members of the battlefront were reincarnated and living a happy life. But, since the main ending was pretty heartbreaking, it’s difficult not to feel sad when you think about it.

Angel Beats is a series with full closure and I don’t think there will be a second season that will continue the story. I would like to see some OVA or movie that takes place between episodes 12 and 13. We never got to find out the life stories of the other core members of the battlefront and how they passed on. This is something I would like seeing developed in the near future. This is something I’m waiting with great anticipation for.

Sometimes I will open up a few episodes to watch, particularly episode 5. But I don’t think I can re-watch the entire series any more, even though I’M A MAN.

 

Hope you all have a great day, and a box of tissue if you plan on watching this amazing series. Also, click here to go to my Angel Beats playlist on YouTube.

An analysis of MongoDB ransomware

All the recent reports of ransomware targeting MongoDB installations has every system admin worked up over the past couple of weeks. Sure, it’s a disastrous to have someone break into your database server and steal all your data. But maybe, if someone can break into your database server and steal all your data and leave you a note about it, you’re a pretty shitty administrator. You take all the necessary security steps when it comes to securing your box, you disabled password and use a key to login to your server (if you don’t do this, you should consider it, otherwise, you’re an extremely shitty administrator) and all the stuff like that; but the one think you forgot to do was enforce a password on your database server. And to put a cherry on top, you left your server all exposed to the public internet with no IP based access control in place. At this point I must ask, how dumb can you get. If you’re dumb enough to leave a database server on the public internet with no password, then maybe you don’t have what it takes to be an administrator.

One of the first rules of administering a system, one that we learn when starting out on the field, is that you put a password on everything as a first level of defense against attacks. The password is meant to be only a first level because it’s the easiest to crack. If you need to have a database server facing the public internet (which, as a matter of fact, you should not be having), you at least implement an IP based filter to only allow your legitimate servers to connect to your all critical data. That way, one has to first go through the trouble of breaking into your front facing server before they can get to your data. I should point out that, if someone manages to break into your application, there’s not much you can do; and, it’s not your fault if someone compromises the application. It’s the developer’s fault for not fixing a bug like that. And, as a third level of security, you should implement SSL connections between your remote application server and your database server. In an ideal case, an administrator should configure a VPN between the two servers and connect to the database over that so the database is not open to the internet at all.

I should lay out a standard guideline at this point for properly configuring a MongoDB instance (or for that matter, any database server):

  1. Always configure a password
  2. Implement a firewall rule to filter connections based on their origin IP address
  3. Configure SSL connections between your servers
  4. Try to setup a VPN connection between your application and database server. This option may not always be possible, but the above 3 points should be enough to secure a server.

Last but not least, setup an automated backup mechanism. In it’s simplest form, an automated backup can be set up by using mongodump, tar, a simple bash script and cron.

And if you ever find yourself in a situation where your server have been compromised and you don’t have a workable backup, may God have mercy on your soul. Actually, you should burn in hell for what you’ve done.

こんにちわみんな

So I started learning Japanese a while back. I’ve always been into anime and I thought, it’s time I learned some Japanese to enjoy things in their original language and meaning. One thing that I found out immediately was how vast the character set was. I mean, learning just hiragana and katakana isn’t all that difficult. What gets my mind boggled is the amount of characters in the Kanji character set. You seriously want me to remember over 1000 characters when all my life, I’ve been used to expressing myself using just 26 letters. This will be a hell to learn. Not to mention the constant practice required to keep all of them in memory.

Another thing that’s hard to get ones head around is the concept of subject and topic. In English, you only have to deal with a subject and an object. Just placing proper words in the proper positions is enough to explain almost everything, and if you mess up the position of the words, you get a meaningless sentence that you know is wrong. In Japanese however, you have to deal with the concept of subject and topic. The two words seem to mean the same thing from the perspective of an English speaker but actually mean very different things from the perspective of a Japanese speaker. A subject explicitly mentions, well, a subject. When using the subject marker, が, we express something about the subject itself. But when using the topic marker, は(わ), we express that the sentence is somehow related to the topic (noun) but not express something about the topic (noun) itself.

Let’s take an example of the name of the anime “Your lie in April”. In Japanese, it’s written as “4月は君の嘘” (Shigatsu wa Kimi no Uso). Now, we can break the sentence into “4月は” (Shigatsu wa) and “君の嘘” (Kimi no Uso). The second part is pretty easy to understand, “君の嘘” translates to “Your Lie”. But the first part is a little vague if you ask me. “4月は” simply indicates the topic is “April” without providing any explanation of the relation to what comes after it. The “April” bit just hangs there without any apparent reason or meaning to it. Now you may interpret the sentence as “Your lie in April” but nothing is stopping you from interpreting it in a different way either. There’s no relation specified whatsoever between “4月は” and “君の嘘”. If you ask me, this is an extremely large shortcoming of a language.

Another thing that got me worked up is the fact that the same word can sometimes mean different things depending on the content you write it in. For example, the word “かぜ” means both “wind” and “cold”, differentiated only by their Kanji writing. “風” meaning “wind” and “風邪” meaning “cold”. So if I’m to put the word in hiragana in a sentence, there’s no proper way to know if one means “wind” or “cold”. So, in order to differentiate between the meanings, I’m forced to learn the Kanji writings of the two words. English is far easier in this aspect in that there’s two different words have two different spelling and pronunciation.

For a language that’s been around for thousands of years, I expect it to be a little more clear with it’s words and grammar. I do not mean to say that Japanese, as a language, is all bad. I’m just pointing out some of the problems an English speaker may experience while learning the language from the ground up. There are also some good points about Japanese that are lacking in English. The fact that the syllables do not change their pronunciation depending on their placement is a huge blessing. It means that one can pronounce any word if they know the pronunciation of the syllables in the word. English is notorious in this aspect for having different pronunciations of syllables depending on whats at either side of it. Sometimes, the pronunciation you expect is not the correct one and you have to hear it’s pronunciation to know about it.

So in short, no language is perfect and each have it’s own problems when you look at them. But, Japanese is a bit complicated because of it’s heavy use of Kanji character set with its vast number of characters. For an English speaker to be able to get his head around the complex grammar and character set requires a lot of study and practice.