It has been another year (or two) since the last time I wrote a blog post. Yet considering the last post I wrote is some kind of a memoir, it has probably been a billion year since I wrote something meaningful (if there has been any at all). I have been suffering from a prolonged procrastination, one that isn’t without excuses – for
- I have been persuading myself to blog in English so that whatever nonsenses I write could be accessible to a broader range of audiences (though I highly doubt if anybody actually reads my blog at all (눈‸눈)
- However, as I am not a native speaker, doing so greatly hinders my writing speed. Instead of putting down whatever comes to my mind, my thoughts have to be buffered before they are converted. I use the term “converted” instead of “translated” because I try avoiding explicit translation – it is just that my thoughts do not flow as naturally as they do when I write in my native tone: it takes much longer for me to come up with appropriate words, not to mention that I have to come back and forth to check my grammar from time to time.
- I have been planning to update my blog for quite a while (I will come back to this topic later in this post).
- Since the more stuffs I have, the more painful it would be for me to migrate them, I held back the urge to write something for a couple of times and decided to wait until I am done with the update to post anything new.
I finally got some time to update my blog yesterday and migrate all of my previous posts from the old domain (
forestofhorizon.com) to current location (
forest.was.blue), which means one of the aforementioned obstacles is resolved. As for the language issue, the best solution I can come up with is to keep practicing – for example, by writing new posts. So here I am, after a year (or two) of silence, I am finally back to blogging again.
Tons of things have happened during the past few years. I set up this blog during my freshman year (my last post was written on its first anniversary) and I am a first year master student now. Thus, before coming back to regular blogging, I am going to write a brief summary of some changes and updates that happened during the lull.
About This Blog
As previously mentioned, I’ve been planning to update my blog for a long while. This was primary because I wasn’t very happy with the static nature of Jekyll-generated GitHub Pages. Unless I’ve missed something important, it is impossible to “lock” any page or to render pages based on authentication status on static GitHub Pages. In addition, I was a little bit unsure whether it was a good idea to mix contents in the blog (i.e. posts) together with codes to generate the blog (i.e. Jekyll layouts, scripts, etc.).
Having those concerns in mind, I tried out several other blog hosting solutions.
WordPress.com looks great at the beginning, for I don’t need to worry about anything happen at the backend at all. Posts could be password protected, just as I am hoping for. However, as a broke college student, I don’t like to pay a monthly fee just to get rid of the advertisements or to use my custom domain (which I’ve already paid for). The engine is also a bit too heavy in my opinion. In addition, I don’t like the feeling of being bound to a service, such that my posts are no longer my properties and can be taken down at any time without notice (which happened a few times before when I was using Baidu’s services). As a result, even though WordPress.com provides good blogging solution, it didn’t work out for me.
Considering the problems that I mentioned above (especially the last part), I’ve also tried to implement and host my own blog engines. I wrote horizon-blue/thehorizon.blue while I was learning React last summer (it’s probably more appropriate to say that I learn React & Flask & GraphQL & some other stuffs in order to write the project). However, because I learned most of the frameworks on the fly and didn’t have a clear blueprint at the beginning, the code was badly organized and didn’t follow a good convention. I’ve probably included too much scripts than necessary, which greatly increase the size of the blog (and the loading time). About half a year later, I received several alerts from GitHub about vulnerable dependencies, yet the code was so badly written that I no longer have the courage or interest to fix them at all _(:3 」∠ )_. One of the course I was taking at that time happened to have a final project requirement where I am free to develop anything, so I took the opportunity to rewrite my blog (as in horizon-blue/tracing). I reuse the same layout and the same frameworks (i.e. React, Flask, etc.); other than those, everything was written from starch. I’ve even include multilingual UI texts that can be toggle dynamically. It was a step closer to my ideal blog and was hosted on
thehorizon.blue before my server expired.
However, with a self-hosting blog, I have to worry about maintaining my own server, keeping it running, avoiding some security issues, and a tons of other stuffs. There is also a small fee associate with the deployments (for those who are interested, I’ve been using DigitalOcean’s smallest droplet which cost $5 per month and come with free DNS. I’ve also tried Amazon EC2 that was included as part of AWS Free Tier. Overall, AWS provides more options, yet it also requires more configurations and its pricing system is a bit more complicated). Besides, I enjoyed the feeling of having control at the beginning, yet after several months, such excitement gradually faded away, and I became tired of having to take care of everything on every detail. So I shut down my server and began looking for other alternative.
Eventually, I came back to Jekyll and GitHub Pages. I am finally tired of re-inventing the wheels and figured that it is much better to use tools designed by experts. In addition, it has almost been two years since the last time I checked out Jekyll, which has evolved a lot over time. For example, the ability to use
remote_theme effectively resolve the problem of mixing a blog’s content with codes that generates the blog. Authentication is still an issue, though it is rather a minor concern. So I re-organized my git repository for the blog, deleted most of the style files, switched to
remote_theme (still using the Minimal Mistake Theme), and migrated all of the posts and Disqus comments to this new domain yesterday (kudos to Disqus’s great migration tool).
It has been three and a half years since I written done my first
hello world program. A lot of things have changed during his period of time – I learned to code with C++ 11 back in 2015 (though C++ 14 standard had already been out at that time, it was relatively new and wasn’t covered in the textbook I used); C++ 20 is under way now. I am not going to talk about what has been happening in the community, as that’s not my area of expertise. What I do know a bit is that the meaning of coding to me has changed as well. My experience might not be applicable to everybody, though to me this is still an interesting story to look in retrospect.
When I first started coding (around Aug 2015, right before I entered college), I put a heavy attention on the selection of programming languages, tools, and the platforms. I literally Googled “what is the best programming language” and read the comparisons post to post. After selecting C++, I went on Googling “what is the best software to write C++” (of course I had no idea what compilers or text editors are), at which point some genius mentioned that it is best to learn C++ on Linux, so I began another “what is the best Linux distribution” search, installed CentOS, and found that my Wi-Fi was dead because there was no pre-installed wireless driver (I talked a bit about this in my previous post). After looping over the procedures above for several days, I gave up Linux and finally settled on Emacs with the compiler come with Visual Studio IDE (on Windows, don’t ask me why). This had been my default set up for a while, until I installed a Ubuntu virtual machine four months later (and switched to Sublime Text after another year).
In addition to the regular computer science curriculum, I had also been reading C++ Primer, 5th edition. Overall I really like this book as it covers everything in every detail – it not only teaches me how, but also tells me why. Even though C++ 14 and C++ 17 are out, it is probably still one of the best introductory C++ books. However, I am a slow reader (especially in English), yet C++ Primer has more than 1k pages. So I never really got a chance to finish the entire book (though I did finish every exercise up to Chapter 14, and my solutions to coding problem can be found in horizon-blue/playground).
C++ is pretty much the only language I used on my freshman year, after which things began to change. The system programming course I was taking was taught in C, yet only the first week of class was used to cover some basic syntax of C. I finally began to realize that… perhaps the language itself isn’t that important? I had taken the data structure course before that (which was taught in C++), yet I failed to realize that the focus is not just about how to use data structure in C++. My theory was further confirmed by the algorithm course I was taking at the same time, which didn’t even require a single line of code throughout the semester (unless you count as a programming language.)
I gradually put down my thoughts of finding and sticking with the “best language” or the “best framework,” and began to explore around. horizon-blue/Hermes, written in late 2016, was my first attempt to try something beyond the standard library (it was also my first “project,” or first program that contain more than 1k lines of code).
Two interesting events happened in early 2017: (1) I switched from Windows to macOS as my main OS, and (2) I took my first machine learning course. The former change greatly improved my productivity (this might not be applicable to everybody, but I found most tools/libraries I use provide better support for macOS or other Unix variants). As fot the latter – I probably haven’t mention this before, but one of the thing that motivated me to learn computer science is the hope to build some intelligent agents (though I have no idea what AI is about before I took the class).
Around the same period of time, I found that my friend Rijn was working with some people on an startup ideas, and joined them (just for fun) after several weeks. UmiUni was launched a few months later. I began learning React Native during the summer and wrote the UmiUni iOS app together with my friend Mingze. (After I am a bit familiar with React Native, I started learning React and wrote horizon-blue/thehorizon.blue, as previously mentioned.)
Nothing spectacular happened in the third year. I wrote a few random stuffs (e.g. horizon-blue/scanner, horizon-blue/chess, horizon-blue/wiki-crawler, horizon-blue/react-native-github-client), though most of them were to fulfilled my course project requirements. I used a few other programming languages (e.g. Java, MATLAB, OCaml), though as language itself isn’t that important anymore, I didn’t go much further beyond learning what could be directly apply to solve the problem.
I began learning natural language processing (NLP), and started reading some literatures on recognizing textual entailment (RTE). With its wide variety of deep learning frameworks and its popularity in the research community, Python gradually becomes the programming language I use on daily basis. Nonetheless, I have been writing fewer code than I used to do. It was a very interesting experience – ever since I started working on ML/NLP research, I often feel that I am no longer a programmer, that I have switched my major from computer science to… something else. Math? Statistics? I don’t know. Anyway, my life has been a lot different than it used to be.
At the end of my third year of programming, I finished my undergraduate degree and interned at IBM Research AI during the summer. We proposed a model that can use external knowledge bases (e.g. ConceptNet) to improve regular models’ performance on natural language inference tasks, and our paper was accepted by AAAI 2019.
I’ve been working as a teaching assistant since the start of my master program, and the tuition waiver finally allows me to stop asking for financial support from my parents. It is another interesting
and enjoyable experience to see students struggling on questions that I once struggled on in the past. I didn’t write much code except for the auto-graders for programming assignments and a few models for my research (which follow the worst coding convention ever).
About My Life
The other aspects of my life are pretty much unchanged. I tried waking up early and going to bed early, yet years later, I am still nocturnal. I haven’t been drawing for a long time, though I plan to start practice again in 2019.
I was dragged to the ice rink on my campus about half a year ago and tried ice skating for the first time. It instantly became my most favorite sport (which is really rare, for I am sedentary and have almost never been fond of any sport at all). Though I am not aiming to become a professional, I‘ve registered a few figure skating courses just to give myself a bit of challenges and to make skating more interesting.
I’ve found someone important to me… which makes me want to become a better person.
There are still a lots of things unknown to me; there are still a tones of challenges that await me. So I will keep going forward.
(Ah, I talked too much…_(:3 」∠ )_