Whenever you write something, you must (at least implicitly) consider who your audience is. Homework is written for the TAs who will be grading it, papers are written for an appropriate research community, and text messages are written for a specific person to read. If I'm being perfectly honest, most of my "extracurricular" writing (this blog, my main blog, and lectures) are written basically for me: I think they're interesting things to think about, and I want to record them. This is not actually the worst case scenario: the worst case scenario is that you aim for some imaginary audience but fail to appeal to them. In that case, literally no one benefits from the writing. If you write for yourself, at least you benefit, and others may or may not benefit. With that in mind, I was told by a friend that I should reflect on the new year and so I might as well add it to the blog and get some content out of it.
With that out of the way, let's see what I did in 2022.
The classes I took at Georgia Tech the spring semester of my first year were
number | classes |
---|---|
1 | ENGL 1102 (english 2), 3 |
2 | MATH 2106 (proofs), 3 |
3 | CS 2110 (computer organization), 4 |
4 | CS 2340 (software design), 3 |
5 | CS 3510 (algorithms), 3 |
6 | CS 2699 (research), 3 |
total | 19 credit hours |
At Georgia Tech every introductory English has a theme; ours was science fiction which was kind of fun. I remember watching Ex Machina for class (not a terribly intelligent movie, by the way, despite its pretenses) in the Coda along with some other movie about a miner on the moon that I can't remember the name of[1]. We also made a Twine game which was neat.
Not much to say about the proofs class, a fairly standard introduction to proofs/bridge class.
In CS 2110 we built a computer from (virtual) electronics and wrote some (fake) assembly which was actually fairly educational –- I certainly learned a lot, even if I thought the class had way too much busywork. In CS 2340, we "learned" to roleplay[2] as software engineers, and CS 3510 I genuinely enjoyed –- even if I knew most of the material going in[3]. The class was taught by Frederic Faulkner who is a great lecturer and gives way too much extra credit.
At this time I was still living on campus, in a so-called "traditional" dorm room. I shared this room with a roommate and shared the bathroom on the floor along with common areas like the lounge and kitchen with everyone on the floor. My half of the room looked something like
I bought those two left and right Yuru Camp[4] tapestries in the fall. At that time I also learned that one should really use 3M's Command hooks to hold things to the wall rather than duct tape to avoid ripping off paint from the wall[5].
I guess there's some tradition to forcing first-years to live two to a room to build like character or friendships or a connection to the school or whatever but practically speaking, there's a lot of annoying things that result from needing to share a room with another person and needing to share a bathroom with a floor of people. After ~13 years of having my own room, I really missed being able to sleep on my own schedule and not having to worry about all the showers being taken at 11:00 PM. I looked forward to the end of the semester for this reason, and luckily for the rest of the year I would have a room to myself again.
I keep track of everything externally "notable" on the news section of my website, this includes stuff like talks, awards, and other research-related stuff. Not listed is that I attended SIAM UQ '22 back in April but didn't present anything. That was pretty fun, the conference was in the Peachtree center so I could just take the metro to and back. The best talk that I caught was far and away a great talk by Andreas Krause on PAC-Bayesian Meta-Learning.
I did give my first talk at the Georgia Scientific Computing Symposium. I spent over two weeks preparing those slides, for a two minute long talk! I was optimistic the paper would be out by the end of the semester and in the absolute worse case, by the end of the summer...
[1] | That movie was Moon, an actually decently entertaining movie, or at least better than Ex Machina was. |
[2] | Have you done your daily scrum meeting? I still don't know what GRASP/SOLID/Agile really mean. |
[3] | See https://cgdct.moe/blog/algorithm-library/, all of which was developed while I was still in high school. |
[4] | Yuru Camp is a bad show but its sky/nature aesthetic is nice on a wall. At least リン is voiced by 東山奈央? |
[5] | Not that I did this... |
Rather than grind for internships my first year, I decided to stay at Georgia Tech over the summer, taking classes and continuing my research[6] which was still new and exciting[7].
Since over the summer you pay tuition per credit hour rather than for the semester, I tried to keep my coursework as light as possible. The classes I chose to take ended up being
number | classes |
---|---|
1 | MATH 4150 (number theory), 3 |
2 | PSYC 1101 (intro psychology), 3 |
3 | CS 4698 (research), 6 (audit) |
total | 6 (billable) credit hours |
The psychology class I just read the textbook and took the tests. Not much to say.
The (elementary) number theory class was surprisingly interesting. We learned about stuff every number theory class covers like modular arithmetic, linear Diophantine equations, and the Chinese remainder theorem but also more complicated things towards the end like the Jacobi symbol, the law of quadratic reciprocity, and Möbius inversion. The homework took forever to do. Up to this point all math homework I'd ever done was just computational textbook exercises which are fairly straightforward if a bit tedious. When you're asked to prove something not immediately obvious you have to struggle with it for a while until you see the approach and then everything clicks into place. It's very satisfying when it does, but when you're in the middle of the struggle you don't know when it will happen.
I still lived on campus but in an "apartment"-style dorm room this time.
I lived with Eshan who I knew would be basically taking a gap year and staying in Japan for research[8] for an entire year (the following fall, spring, and summer semesters). For this summer I applied for the President's Undergraduate Research Award or PURA funding and to my great embarrassment was actually rejected[9]. Eshan, on the other hand, got the PURA award but chose be funded off Bloch's NSF REU funding, so he turned it down anyways.
Other than eat terrible dinners at North Ave together, we talked about signal processing, information theory, and circular convolutions. We also binged anime late into the night, watching the three Fate stay/night movies and two seasons of Fate/Zero. Eshan has been contributing to free software for a long time, but this summer he was particularly productive: becoming a core maintainer of meow, a modal editing system for Emacs, hacking on the PDF viewer sioyek, and contributing patches to GNU Radio.
I'm just now starting to realize these are the last memories I had of him before he went off to Japan. They're becoming increasingly poignant as I seriously wonder whether he'll ever come back to the United States and finish his degree. We'll just have to see this fall.
On the research front I started a new project, but starting a project for me means doing a lot of math and exploratory work to get a footing for a new area before actually working on something that will become a paper. My first project was more of a starter/get-your-feet-wet sort of project, and this new project was true research: no one, including my advisor, knew where it would go. So that's exciting, but also a bit scary.
[6] | Not a lot of research got done, admittedly. |
[7] | Not that it isn't anymore, but the dynamic has definitely changed. I'll talk about this more in the fall semester. |
[8] | and for other, possibly more compelling reasons... NTT doesn't pay very much, that's for sure... |
[9] | Ironically, I would later get the award for the spring of 2023, but like Eshan I can't accept the award because I'll be a teaching assistant for algorithms in the spring, which by College of Computing policy is mutually exclusive. From this I learned that writing good proposals is a learning process. You live and you learn. |
Perhaps I had too much free time over the summer, so I overcorrected a bit in the fall.
number | classes |
---|---|
1 | CSE 6644 (iterative systems), 3 |
2 | MATH 4317 (analysis 1), 3 |
3 | MATH 4441 (diff. geometry), 3 |
4 | MATH 2552 (diff. equations), 4 |
5 | CS 4641 (machine learning), 3 |
6 | LMC 4701 (thesis writing), 1 |
7 | CS 4699 (research), 6 |
total | 20 credit hours |
I actually failed the advanced standing exam[10] for differential equations in the spring so I figured I might as well just take the class rather than attempt the test again. I thought I would pass easily since I took a differential equations class in high school, but after two years I was rustier than I expected (not studying at all doesn't help). I didn't go to lecture or studio past the first week and got an A in the class, so I'm not sure I learned my lesson. Perhaps I learned the material by osmosis through the homework and the quizzes.
I was auditing the graduate-level class iterative methods for solving linear systems which is why it doesn't count towards the total number of credit hours. The class was taught by my advisor, Florian Schäfer, and it was great: I was introduced to all sorts of fundamental algorithms like the Richardson iteration and conjugate gradient but also deep connections, like how one can prove gradient descent for optimizing convex functions works because Richardson iteration converges for monotone[11] operators and the gradients of convex potentials are monotone. I'll definitely be taking numerical linear algebra in the spring.
The machine learning class covered way too much material in way too little time, so every topic covered felt either superficial or way too rushed. The homework was slightly entertaining if a bit useless –- for the first time in my life, I was scared of math. If an equation was written in the homework I would skip the problem and let the programming and extra credit parts of the homework keep my grade relatively intact. I'm still not sure whether the reason I couldn't parse the equations was because I didn't want to think or because the equations were absolutely meaningless strings of symbols that aren't even syntactically valid.
Analysis was interesting, if a bit slow. Mostly relied on the (pretty good) textbook for learning. Like number theory homework took forever since it was proofs again, but I've gotten decent at playing the definitions game from bashing my head against the wall over and over again.
Onto the class I've been avoiding, differential geometry. Perhaps I should just get it out immediately: for the first time in my life, I got a B in a math class, lowering my formerly pristine GPA to an unthinkable 3.94/4.00. The funny thing is it wasn't even because I failed the exams (I got a 35/40 and 37/40 on the first and second midterms respectively, solid results).
It was mainly because of my low homework grade –- I simply didn't do some problems. It was a mix between procrastinating until the very last minute to do homework and a general apathy; homework was always due on Fridays, the same day I went to two different computational science & engineering (CSE) seminars (a student/working seminar and the department seminar) as well as a meeting with my advisor, on top of that, I was also running Georgia Tech's computer science Theory club as a core officer at this time which also met Friday evenings. After the meeting I would always go out for dinner with a few close friends... Friday was definitely the busiest day of the week and by the end of it all I'd be lucky to get back by 10 PM to start my differential geometry homework due in two hours. Put on top of that not going to class for months so I would need to self-teach myself the material while doing the homework... It's a miracle I managed to pull a B, to be honest. A mix between my decent linear algebra, haphazard studying, and the homework I did do. I remember walking into the second midterm fully expecting to score a literal 0% (which would have been survivable, the midterm was only worth 10% of my overall grade) only to be surprised I actually knew how to do every problem. I walked out of that exam as happy I as could be.
So now the natural question is why I didn't go to class. Partially out of arrogance (for most CS classes you can never show up and do perfectly fine), partially out of a bad sleep schedule[12] and needing to wake up at 8:30 AM to catch a 9:30 lecture (I lived off campus now so there was some movement time). I guess I just made a habit of it, towards the end of the semester I didn't feel the need to go to any of the classes I was officially taking[13] (I did still go to every single iterative systems class, not out of a sense of obligation, but because it was legitimately engaging). This is odd behavior for a so-called college student and something I'll probably have to correct in the spring (or at the very latest, by the time I get a real job).
It's not all depressing though. In the fall semester I finally moved from on-campus housing to an off-campus apartment, which was a much better living experience in a lot of ways.
A good view, a large, spacious room, a huge full XL bed in comparison to the fairly cramped twin XL dorm room standards. My own bathroom, with my own shower! Our own laundry machine next to our own little kitchen and living room, I could go on and on. The biggest benefit might just be stability: I could stay here for the rest of college if I wanted, while campus housing was not guaranteed and would make me move every year. And with stability comes a real sense of ownership, and with ownership a sense of control over one's living.
I started cooking in an attempt to wean myself from the meal plan, but towards the end of the semester it degenerated to making nothing but noodles or shamelessly freeloading food off Daniel (who is a great cook, by the way). In the spring, I should learn more recipes.
Research-wise, I've been painfully coming closer to the release of the first paper step-by-step. Around September all I needed to do was run "just one last experiment", and that last experiment has lasted until now. Papers take longer to write than you'd think. At this point I've finally done all I need to do, and now it's just up to review by my advisor.
I just want it out on arXiv already. Whether it gets accepted to the journal we're submitting it to is another, quite scary, question but that's a problem to deal with in the future.
For the new and exciting project, I've about wrapped up the mathematical background and I've started writing a bit of code, but I've hit somewhat of a wall trying to understand this inscrutable half-page long equation. It's like watching a car crash in slow motion; I've seen this wall from the start of the project, but now it's concrete and rapidly approaching me. We've emailed the author of the textbook how he derived it but he seems to have forgotten.
Is this what real research feels like? It doesn't feel great.
I have some hope I can figure it out with enough time. It's a whole other question whether this will even be useful, and whether it will be worth publishing. But I guess that's research, and as an undergraduate, nothing is really staked on the success of my research career.
I should also mention I also gave my first professional talk at SIAM MDS '22. Met a lot of smart people and went to some pretty interesting talks. Also got pizza with my advisor.
[10] | A system that allows you to get credit for certain class you aren't taking by passing that class's final. |
[11] | In the sense that is a monotone operator if it holds that . |
[12] | When my sleep schedule was at its worse, I was basically living in JST texting Eshan. |
[13] | You might be wondering what I did all day if I didn't go to class. Me too. |
I'm currently back "home"[14] in Silicon Valley (a bit of a shock to see so many famous tech companies). Visited Stanford campus, Apple's new headquarters, things like that.
Speaking of Apple, I finally left the Apple ecosystem. Since my parents happened to be switching phone carriers it was really cheap to swap out my iPhone for a Google Pixel 7. I'd been using a Tuxedo Pulse 15 as my main laptop for a while now, but I finally got around to erasing my old Macbook. So as of today I've finally embraced Linux on all my hardware, but with a vendor-locked, stock operating system phone it feel more like choosing the lesser of two evil tech companies than a principled decision promoting free software.
I've also been working on my website. I finally bought a domain
(cgdct.moe
) from
Porkbun; domains are really cheap (I
pay like $13.68 a year for .moe
). Since I have my own
domain now I've been (over) optimizing the site with every free
Cloudflare feature imaginable
and just recently added the domain to the
HSTS preload list. The website shows up when you search my name on most
search engines.
Since I have my own domain I can do crazy things like
@cgdct.moe
email addresses and subdomains like
anime.cgdct.moe
.
[14] | My parents moved recently so I've never actually been here before now. |
I'm beginning to believe in the idea that
If you want to do something consistently, track it with a heatmap.
which is an idea related to profiling: you can't optimize what you can't measure.
The data for this can be found right on my website but really comes from MyAnimeList.
Believe it or not, I struggle to watch anime. Perhaps I take it too seriously (everything has to be just right) or it's just not a priority, but I don't watch as much anime as I used to (and would like to). I think the benefit of anime is that's is very discrete and trackable –- you know exactly how much time you're wasting by how many episodes you've watched. There's a notion of progress. Compared to something like YouTube or TikTok where there's not really an "endpoint", that makes it much harder to know when to stop. So anime is a "waste of time" like all entertainment, but it's a relatively benign waste of time if properly managed.
Somehow the amount I watch anime does not correlate with how much free time I have. I seem to have stopped watching anime over the summer despite having the most free time over the summer, objectively the best time to watch anime. Similarly confusing is the lack of watching over winter break and the fact that weekends seem reasonably close to weekdays.
Fundamentally I think a good litmus test is that if you can't spare just 30 minutes a day for messing around, then something is wrong. Related to this is the fact that I've stopped making tea, despite it being like ~10 minutes to make a cup of tea. Am I so busy that I absolutely can't spare the one hour a day to make a cup of tea and watch two episodes of anime? Obviously not, so I'm not quite sure what is going wrong.
I have the tendency to get very caught up in (unproductive) things and work very intensely on them for days at a time (kind of like I'm doing now with this very essay). The lesson to be learned here is to set things down and pick them up the next day. When it's 10 PM, set down whatever I'm working on, make a cup of tea, watch two episodes of anime, do Anki, and then go to bed. Easy to say, hard to do consistently. That's where the heatmap comes in.
Like Eshan (before he quit) I've been using the spaced repetition system Anki to learn the Japanese language. The details of this are not terribly important; they might make their own blog post, or maybe not since the software stack and associated learning philosophy has been run into the ground with articles, blog posts, YouTube videos, and entire companies[15].
Towards this end I've been doing sentence cards from the 2k/6k Core deck along with my own occasional mining. I've been doing this daily for just over half a year now.
I do 20 new cards a day which translates to about 100-200 reviews per day. It takes me around 30-40 minutes now, but I was significantly slower when starting out. 30 minutes a day doesn't sound like much, but it's more significant than you'd think. I don't think I do anything else with the consistency of Anki. As I like to joke,
I don't go to class, I don't eat, I don't sleep, but I do do Anki every day.
The key to Anki is consistency. Although 200 reviews a day doesn't sound like much, 36,564 reviews certainty does. And although 6,000 words sounds like an overwhelming amount to learn, doing just 20 words a day means you'll finish in 300 days, or just under a year. The key is to actually do 20 words a day, every day, no matter what. Forgetting that you still have 1,760 more words just in this deck to learn, and much more after that...
Eshan estimates one needs to learn about 10k words to be decent. At 20 words a day, that works out to 500 days, or just under 1.5 years. Fundamentally you're in it for the long haul, but you already knew that. It's easy to forget, though, when you start to think past just raw vocabulary is grammar, speaking, pitch accent, writing (with pencil and paper), and so on...
I've started to read 少女終末旅行 (Girls' Last Tour) semi-seriously, although I stopped over winter break. I read a chapter in Japanese, then check my work against the official English translation by Amanda Haley. This translation is so good, it makes me actively less hopeful. I've put in hours carefully scrutinizing a single (~20 page) chapter only to come to the exact same conclusions as the translation. It's almost flawless, and it makes me seriously question whether I will ever be as good, even in the limit . Especially for languages, I've heard the younger you start the better for fluency. There's not much I can do beyond continuing to take each small step forward every day in the relentless march towards mastery.
As an aside, I've had some hope that I could pivot this into Chinese and reclaim some of my long-abandoned cultural heritage. It might even be easier considering I was apparently fluent at age three. How much of it I can regain easily is the question.
[15] | None of this is meant to be taken as endorsement or advice. I don't have much first-hand experience with this proliferation of learning content or with the Japanese language learning community in general, whatever that means. As a relatively antisocial person I don't go on Discord or whatever young people are doing these days. Rather, I think the most sane way to learn Japanese (and most skills for that matter) is to find someone whose skill level matches what you're aiming for and ask them how they got there. You don't need to (and shouldn't) copy their path exactly, but it certainty helps as a template and reference point you can customize to yourself. |
Basically everything I do is on GitHub one way or another now. This website, the paper, research code, lectures, pet projects, configuration files, keyboard firmware, everything.
There's not much I have to comment on other than the apparent gap in the spring semester. I don't really remember the spring that well, so I wonder what I was doing.
In the last two years of my high school I used to write prolifically. I've since stopped after entering college, but I'm starting to pick it up again thanks to doing research and significant investment in the technical infrastructure, typesetting, and general visual design of this fancy new website. The only problem is that writing is a huge time sink and I have too many ideas.
There's a few posts for both the main blog and this personal blog in various stages of completion that I won't spoil here (and also so I don't embarrass myself when they inevitably aren't finished). Technical content always has its merit; at the very least I could present them at Theory club. I'm thinking of writing anime reviews for some shows I've watched recently, but I don't really know who the audience is or what the point is. To answer myself with the introduction, I guess the audience is me and the point is that it's fun and interesting. But there are a lot of fun and interesting things in the world, some more productive than others.
With the past in mind, what would I like to do in the future?
I want to get out my first paper, hopefully by the end of this month.
(when have I heard that before... but for real this time...)
In the next weeks I need to prepare some applications to some summer research programs; if I'm successful, you'll hear about it on my news page.
In the near future, I should present something at GSCS '23.
I have my undergraduate thesis to write, so I should get new results to write about.
I've learned a bit of Julia, though the more I learn, the more skeptical I start to become.
(there really are problems with its stability and correctness, though whether these are fundamental problems with the language or can be solved with polish remains to be seen)
Very recently I've started to become interested in formal verification and proof assistants. Unlike my friends I was never terribly interested in functional programming, Haskell, Lisp, things like that. But apparently one can express mathematical structure quite nicely and naturally with ideas from functional programming by dependently typed languages.
The main players seem to be
Lean, with far and away the most developed mathematical library,
OpenAI endorsement doesn't hurt
F*, the most practical formal verification tool that combines the Z3 theorem prover with manual tactics along with extraction to variety of other programming languages,
and Coq, the oldest and most established with plenty of learning resources.
I haven't done much more than play The Natural Number Game, but just that bit of exposure was enough to convince me that there's a whole new way to think about mathematics and programming languages, and this new way of thinking is useful and powerful in its own right.
I'd like to start proving things in Lean, whatever I can get my hands on.
I'll continue to do Anki.
I'd like to finish all 6 volumes of 少女終末旅行.
After that, I'd like to start mining anime.
After that, I'd like to read the 〈物語〉シリーズ.
I'd like to consistently make tea, watch anime, and sleep at a reasonable time[16] each day.
[16] | By my definition of "reasonable". |
I should start running again.
(or maybe get into bouldering again)