Highlights in 2018 and Short-Term Plans in 2019

I won’t write a reflection on what I did in 2018 because my resume and GitHub commit history are already self-evident. In the first part of this post, I will list some amazing things I created in 2018 for the purpose of summary, because some of the blog posts are long and I know you want to a TLDR version. I will then talk about some short-term plans that I hope to check off before my winter holiday ends.

Sam’s Work in 2018

On June 14, I setup my blog and created the zeroth blog post. It wasn’t particularly interesting, because it’s not that different from any other hello world post hosted on GitHub pages. What’s interesting is that it’s definitely not my zeroth blog post. In fact, I’ve been constantly switching between different blog service providers. Initially, I was on Google’s blogpost. Then for the sake of a custom domain, I switched to wordpress.com around 2015. However, I was eventually disappointed with its ability of customization without payment (I want Material Design!), so I wrote my own and open sourced it. Nevertheless, my open-source one was too primitive and was almost ignorant of SEO, so I switched back to a hosted WordPress. The hosted WordPress was on an f1-micro machine on Google Cloud for free. Around last June, I wanted to do something else with that free VM so I moved to GitHub pages. Now things had been settled down and I’m pretty satisfied with the ease-of-use and customization ability of GitHub pages.

Starting from May to June, I was mostly working on my programming SAMPL in the free time. In mid-June, I published two blog posts on it, one on its design, and another on one of its design mistake and my fix. This is my first real attempt on creating my programming language, and I thought it was quite successful in terms of my expectation. My biggest disappointment was that its error messages were really bad and cryptic.

In July, I was trying to migrate my website to a cheaper and better tech stack. In August it was mostly complete so I wrote two posts on the evolution of its architecture and my adoption of CI/CD systems for my website. The second blog post was written when I was traveling in mid-west US. I thought the journey was boring so I started to write code and blog posts.

While I was on the journey, I was invited to CS 2112’s Slack group. It prompted me to think about its critter language and I suddenly had an idea about a critter compiler and a proof for the Turing-completeness of critter world. I implemented the compiler in the last few days of my trip and published a blog post about the discovery on August 27. The blog post was short and fun, and the critter program used in the blog post became a new test case under my influence. ;-) (Probably the students who failed this test case were not very happy.)

Then there was a busy semester. I didn’t have a chance to fix some problems on my website, except that I upgraded Angular to v7 at the night before Cornell’s BigRedHack to test the infrastructure. I was in one of Cornell’s project teams: Cornell Design & Tech Initiative, and I was working on the Samwise subteam that tried to create yet-another todo app.

I was finally freed in mid-December, but I spent another week fixing some design mistakes for my project team because we planned to launch the product early next semester. When the fix ended, I was invited to an alumni sharing event to talk about my computer science experience in college. I met with many parents who had little-to-no idea about computer science and probably come to my session just because they knew that programmers earn a lot. It prompted me to write a 4000-word long post on my CS experience in high school to show a facade of CS that is not about money. In that blog post Computer Science in High Schools, I wrote about my story that was mostly about failure and my thoughts on computer science, nerds, and college admission in high school in a general sense. If you want some strong opinionated stuff, go ahead and read it.

Short-term Plans in 2019

When I was writing these blog posts recently, I was also working on my new programming language that I decided to call samlang. Unlike SAMPL that has a dummy meaning “Sound and Modern Programming Language”, samlang doesn’t have any. (I want it to contain the substring “sam” and I can’t think of any good way to do it.) The language is completely different from the last one because I want a better type inference algorithm and better error messages, which is too difficult to fix under the old ill-designed architecture. By the time of writing this post, this language has no unit tests, unfinished implementation, and probably some unfixed bad assumptions. I will try to fix these problems in the next few days and open source a somewhat working prototype soon. As always, I welcome your contributions, even if it’s just a trivial test case.

I also plan to change my website’s architecture. In general, I want to break some hosted side-projects to their separate servers and try some new stuff (especially ReasonML) on those projects. For other parts of the frontend, I want to migrate to the React framework because I will be a Facebook intern this summer. I would also like to have some early experimentation of microservices on my website if I have time.


I would like to end the post with a valid and over-engineered hello-world program in my new programming language:

class NewYear2019<T>(message: T) {
    public function init(): NewYear2019<string> = { message: "Hello World!" }
    public method getMessage(): T = val { message as msg } = this; msg

util Main {
    function main(): string = NewYear2019::init().getMessage()