2021 in Review

I really thought COVID would be over by this December. Making a mockery of last year's review, where I wrote that daily cases were hitting record highs, year-end cases are now approaching ten thousand a day. Still, thanks to the living-with-COVID trial version and the World Finals I went to in the middle of all this, I got around a lot more than last year.
A Life Goal, Gone Just Like That
Luckily, I got invited to the ICPC World Finals. To compete, all three team members had to be fully vaccinated, and Korea's good vaccine supply made that possible. I got to look around Moscow, and also just looked at the problems before coming home.

Back in 2019, I guess I wanted to go to the World Finals that badly — making it to the World Finals was something of a life goal for me. And it always felt incredibly far away. Yet here I am, having achieved it in such an anticlimactic way. It leaves a vague, unsettled feeling in a corner of my heart. Maybe what I really wanted wasn't making it to the World Finals itself, but being good enough to advance to the World Finals from the Korea Regional.
It was a great experience, but personally, finishing 87th was really, really disappointing. And while it's true that I got the chance because we were one of the top teams at the 2019 Seoul Regional, I keep thinking I didn't truly achieve my goal, since we wouldn't have advanced if it weren't for COVID. So even though it's a goal I've already reached, I'm going to give it another shot after I go back to school. I want to settle this.
I'm writing up a post about competing at the World Finals and traveling around Moscow. Stay tuned!
Software Development
solved.ac

Continuing from last year, I poured a lot of effort into developing solved.ac this year too. Let's go over this year's big features.
Source-based problem search. (January) You can search problems by their source. Things like
from:sogangandfrom:ioi2021work now.AC Rating. (March) We dropped experience-based tier calculation and introduced a new rating.
A backend rewritten from scratch in Express. (June)
solved.ac Discord and Discord integration. (June) You can link your solved.ac account to your Discord account so that when your tier changes on solved.ac, your role on Discord updates right away. Since you have to use your solved.ac handle as your chat nickname, moderating the server chat is less of a burden too.
Twitter integration. (June) It tweets in real time whenever you solve a problem.
Streaks. (July) It counts the number of consecutive days you've solved problems. Haven't you felt more motivated to solve problems since streaks came out?
Stardust. (October) Solve problems and contribute, and you get some kind of currency.
Problem-solving events. (November) There were lots of ups and downs, but we ran a Pepero Day event. We sent out real Pepero.
Coins and the coin shop. (November) You can buy profile backgrounds and streak freezes.
That's a lot!
After the AC Rating update in March, I ported the entire backend, which used to be written in PHP, to Express.js. Would you believe me if I told you the old backend server sat on EC2, I edited it over FTP, and there was no version control whatsoever? It's unthinkable now.

solved.ac's API set was already huge, so porting it to Express took a whole three months. But looking at the update history after the port finished in June, I think the DP really paid off. If I have time, I'd like to write a post about the port too. Honestly, whenever I say this, I end up never writing it. I'd have to make time for it, and that's hard.
Summing up the big technologies and methodologies I've picked up since porting the backend, from March through December, there's
Github Actions: CI/CD
Zero-downtime deployment to ECS via AWS ECR
All the way to automated deployment with Github Actions
Sequelize: ORM
Setting up a monorepo with yarn workspaces and lerna
Building an efficient workflow with easy code sharing between client and server
Building a rate-limiting middleware in Express
Query optimization with SQL optimizer hints — this made advanced problem search massively faster
and so on. I always claim that I develop in a very hacky way, and I really do, but I finally feel like I'm building something somewhat properly. Still, I feel like I have a long way to go, and I want to keep growing. Now I'd like to try TDD….
Next year, rather than building new features, I want to focus on laying the groundwork for writing the guides. The guides have been delayed way way way way too long, I'm sorry, please bear with me next year too
It kind of feels like I alternate every year between a (relatively) challenging frontend task and a challenging backend task. Will I be able to finish the groundwork for the guides next year?
Korea Olympiad in Informatics Contest Frontend

This year, I designed and developed the frontend of the contest system for the Korea Olympiad in Informatics, which was held online. I did all the design too.
I tackled a ton of challenging frontend tasks. For example…
Fetching judging status in real time over WebSockets
Autocomplete that isn't perfect since there's no language server, but offers a bit of convenience
A resizable split view of the problem statement and code editor, code blocks that get truncated when too long and can be expanded and collapsed with a button, snackbars that can render LaTeX, the Bebras Challenge (dynamically embedding interactive JavaScript code that renders to a canvas) …
Screen recording and various other solutions to prevent cheating
and more. I can't go into more detail, but it was a really tough project. Maybe because I only started algorithmic problem solving after entering university, I always regretted never getting to compete in the Olympiad in Informatics, so I was proud to take part in it this way, at least. Same goes for NYPC!
It came striding up to me before I was ready

I don't know how, but after working at the company for a while, I ended up with a title…. Wow….
Despite my limited skills, I got to be an interviewer and got involved in various things at the company, and then in December I was appointed part lead. It's a small part, but it's my first time managing, so I'm nervous about whether I can pull it off.
Am I doing okay? Even if I'm not, I'll do my best so I don't let down the people who believe in me
It's hitting me all over again how good those days were. Though honestly, if you swap that for ‘team lead,’ it still holds for now
Competitive Programming
NYPC
After developing the NYPC system, this year I set problems for it.
I set Qualifier #1, Stairs and Qualifier #7, A Tree with Many Roots. The stairs problem came from my losing weight by climbing 100 floors of stairs a day, and A Tree with Many Roots was a problem I came up with while spinning around in my chair at the office and going, oh, this is pretty good. It was such an honor to present my problems at the best contest out there!
Contest Organizing
Not as many as last year, but I helped run lots of contests this year too.
NYPC 2021 (Nexon) — problem setting, testing
SPC 2021 (Sogang University) — problem setting, testing, typesetting
Ресторан (Read as ‘restoran.’)
SUAPC 2021 Winter/Summer (Sinchon-area university alliance) — problem setting, testing, typesetting
Good Bye, BOJ 2021! — problem setting, testing, typesetting
Set 1 problem that can't be revealed yet
PPC 2021 (POSTECH) — testing
On the other hand, I set way more problems than last year. I've now built up a problem bank and pull one out whenever a contest needs it.

NYPC and SPC in particular were held onsite, which was a lot of fun. I was hoping living-with-COVID would carry on so we could hold Hello 2022 onsite, but sadly a new variant showed up…. When will the next onsite contest be possible?
Codeforces

I think I got cocky after framing the orange I happened to hit by luck. I did one contest on January 28th, didn't do any until November, and when I came back I blew past purple and took a trip to blue.
I lost a whole year. Time to pull myself together again.
Contests I Competed In
This year, I competed in UCPC as a contestant. Surprisingly, it was my first time in the finals as a contestant, and we got a remarkable result: 5th prize (12th place).
Making Code Jam Round 3 and winning a prize at SCPC were my small goals for this year, but…
I'm not sure what happened at SCPC, and at Code Jam I made a ridiculous mistake and failed to advance to Round 3.
That's three years in a row of Code Jam Round 2 and SCPC finalist. I really, really hope I can achieve this year's goals next year. I'll have to work for it.
Besides that, I competed in the ICPC World Finals.
Graphic Design

This year, I tried 3D for the first time. I made some simple solved.ac profile backgrounds.
Also, as I mentioned above, I did the UI/UX design for the Olympiad in Informatics frontend. It was fun.
I made posters this year too.






Everything Else
Unlike last year, which was pretty boring, this year was full of life events.

Somehow I came to like someone, and we started dating.
We go out for pasta, tonkatsu, gomtang, kimchi jjigae, chicken and beer, cafés, cocktail bars — we're spending every moment together. These have been the happiest days of my life.

And I got the best birthday celebration ever. I don't think I'll ever forget it.

I used to live with my parents, but the office was too far, so I started living on my own in Nakseongdae. My round-trip commute got about 1.5 hours shorter, and I can get delivery from Sharosu-gil.
The problem is…. From December to June I lost a whole 15kg by climbing 100 floors of stairs every day, but after I moved out, between ordering delivery a lot and going all over the place with my partner, I gained back exactly as much as I lost. Determined to lose it again, I'm hiking up the mountain behind my place every day.


Living on my own, I've been making mapo tofu and carbonara a lot. My cooking has gotten better. The carbonara isn't the cream kind but the kind flavored only with egg yolks and cheese, and after a lot of practice I can now make a warm carbonara without scrambling the yolks. My place only has a single-burner induction stove, so it's still a bit tricky.

My laptop broke, so I bought a new one. I already use a Mac as my main work computer, but apart from briefly using one during my internship at Hyperconnect, this is the first MacBook of my life. I figured that past a certain level of performance, battery life matters most, so I got the 14-inch Pro. I think it was a good buy.
Finally, Hanbyeol, who hadn't been around much for a while, came back this year. Isn't she super cute? I'd long had a little wish to see her in Live2D someday, and this year it finally came true.
Lots of cute illustrations were added too. Many of them are also available as solved.ac profile backgrounds.
My New Year's goal this year was ‘have a reasonably good year.’ Would you say I had a reasonably good year? There were lots of happy things I never saw coming, and also some things that made me reflect on my cockiness.
Next year, my service as an industrial technical personnel ends. Whether to keep working at the company or go back to school and finish my studies early — and if I go back, whether to do a double major or prepare for grad school — I can't stop thinking it over.
Happy New Year! I hope next year we get to enjoy the full release of living-with-COVID. 🔔






















