现充|junyu33

Thirty-four — blog 2nd anniversary / NUS trip

Time flies; it's already been two years.

Days

7/4

Landed very late, a certain counselor immediately bombarded my WeChat.

Automated clearance neither allows Taiwan nor Russia—is this what small-nation diplomacy looks like?

The aircon set at 24°C was a bit cold, I had to sleep upside down. (Unfortunately it stopped after 100 minutes.)

7/5

Woke up at 9 a.m. and took a walk around NUS. The sun was blazing, I cursed myself for not bringing a water bottle.

Queued for lunch at peak hour. The line wasn't long but it still took half an hour.

In the afternoon I speedran planetarian. By the time I finished, the sun was gone; checked my phone and it was already storming.

Welcome dinner dessert was amazing.

Learned that my group is all guys, so the chance of finding a girlfriend dropped drastically.

Walked downtown to get a SIM card (and also preordered a Google Pixel 7a). Bought some souvenirs at the mall which I ended up eating all myself.

Bought some travel sockets from a vendor, only to realize they were the old-style plugs from back home.

Blogroll +1.

7/6

Morning: Hugh's System Complexity was a bit abstract, no idea if the MCQ will cover it.

Cryptography class—third or fourth time already.

At noon, the counselor told us to gather at COM1, then ghosted us.

Afternoon: discussed project topics with Hugh. The three current options are crypto, meltdown/spectre, and program vulnerability testing.

After discussion, argued with teammates some more. Tentatively decided on secure multi-party computation, though deep down I still want to stay far away from crypto.

Evening: pure procrastination. Found out songs on NetEase Cloud require VPN to download back in China. Didn't want to spend 30 RMB on roaming, so I installed strongly recommended by Suzume Spotify and tried migrating playlists.

Song library

  • Original tracks from Makoto Shinkai's movies are all there
  • Touhou originals are complete, most doujin tracks included
  • Galgame OSTs missing (copyright?)

Search experience

  • ENG works
  • JPN (romaji) works
  • JPN (kana) mediocre
  • CHN nonexistent

Set Do Not Disturb on my phone at 10 p.m., which caused me to miss the 11 p.m. WeChat relay for the Class of '21. Only saw it half an hour later—another message bombardment.

Midnight: following this blog, discovered my CPU is also vulnerable. Means I don't need qemu, just set up Ubuntu 12.04 for the environment.

7/7

Morning: continued with crypto, speedran a semester's worth in three hours, plus MPC on top.

Afternoon: did Seed Lab's OS lab. Senior said we'll repeat the same lab in our third-year core courses.

The lab itself wasn't hard; the real challenge was the school PCs, which run on network boot. The more people, the slower it gets. Luckily I came early, avoided peak hours, and finished first.

To make the next lab less painful, I downloaded the VM to my own laptop.

Went to the central library afterward. In the Chinese section, read some of Lee Kuan Yew's diplomatic conversations about June 4th (1990). Unfortunately the temporary card didn't allow borrowing.

Lee's outlook on the mainland and Hong Kong back then was fairly optimistic.

But his way of discussing democracy was really too much to handle, you know what I mean.

Evening: went back to the vendor to pay the Pixel deposit. Tried taking the bus; realized my all-currency credit card (with Mastercard logo) doesn't work for transit. Had to get off.

Remembered I had an unused transit card. Downloaded the ezlink app and found it was preloaded with 15 SGD. Problem solved.

On the bus I noticed many stop buttons. I vaguely recalled that in some countries you must press the bell to request a stop, but this bus seemed to stop at every station anyway, so I ignored it.

Forgot to tap out when I got off.

Paid 100 SGD deposit at the store. Saw there was a UnionPay-enabled ATM next door, decided to settle the rest in cash later.

Tried the all-currency card again, failed. Paid with my CCB savings card instead, exchange rate 5.45.

Asked the vendor how to reload ezlink without a working card—he said you can use cash at MRT stations.

On the return trip, because there were fewer passengers, some stops were skipped unless the button was pressed. So the button is necessary. I managed to get off at the right stop.

Forgot to tap out again.

Thankfully, forgetting doesn't result in caning, just gets charged to the terminus. Only costs an extra dollar or two—acceptable.

Evening: reproduced meltdown. Two PoCs on GitHub, one worked. Fulfilled the promise to teammates—project will be crypto after all.

7/8

Weekend, so I slept in until 10.

Morning: continued trying meltdown, no real progress, moving on.

Afternoon: brainstormed downtown outing, decided to circle around the Merlion.

Some classmates suggested watching the night view, I agreed (afternoon too hot anyway).

Used the gap to do laundry. When dumping clothes into the washing machine I forgot to take out the shampoo and shower gel—the drum was full of bubbles (well, clean now).

Evening: tried MRT. Yes, you can top up with cash. Tried my credit card again, still useless (cursed it a hundred times in my head).

The MRT lines are named by direction/shape (e.g. North South Line, Circle Line), not numbers.

Got off at the Flyer, happened to catch a military rehearsal (for National Day parade in August). The jet noise was deafening—even covering my ears didn't help.

Crossed the Helix Bridge to a supermarket. By then it was dark, the Merlion was backlit, only its silhouette visible.

Bought tickets for SkyPark. Thankfully Google Pay worked with my credit card, exchange rate 5.37—thanks, Google.

Traffic was terrible. Fireworks started as we walked to the entrance. By the time we arrived, it was past 8:30 closing. Need to come back next weekend (tickets valid until September).

Checked WhatsApp on the way back: vendor had messaged at 8 p.m. that my phone had arrived. But since GSpace can't handle system notifications, I only saw it now. They close at 9, too late, had to head back to dorm.

Tried buying Coke from the dorm vending machine. Credit card still didn't work. Inserted several 10 cent coins, all swallowed. Later a classmate showed me—you have to insert coins before selecting the product.

7/9

Some classmates overslept, zoo plan canceled. Went to vendor to pick up my phone instead.

This time remembered to tap out—only 0.99 SGD fare.

Stripped-down Android of course doesn't allow one-click migration, had to move apps manually.

Being able to experience the Google ecosystem directly at the OS level is just too good.

Lunch break: light drizzle when entering the cafeteria, got drenched coming out.

Afternoon plans rained out, continued setting up the phone. Too lazy to install QQ, moved some tech groups to Telegram (ended up installing TIM anyway, project group's there).

Evening dinner, heavy rain again. Procrastinated on YouTube, also applied for a giffgaff SIM.

Continued setting up phone. PayPal CN login required a telecom SMS. But since human support was already off duty, had to wait until tomorrow.

7/10

In the morning I was walking when I saw an email saying the professor was sick, so the whole day was a holiday.

Then I finally fixed PayPal CN login, bound PayPal to Grab, tried binding a physical card to Grab, but failed.

At lunch I realized Grab requires payment via the wallet balance, and the wallet balance can't be recharged with PayPal. The morning's effort was wasted.

So I was forced to bind the retired credit card (the one I abandoned because it can't pay for ChatGPT). It worked, I topped up 10 SGD.

Then I also bound Pick&Go to Grab, tried to buy milk downstairs, payment failed, so I had to bind another virtual card.

Singapore's payment system is even more unpredictable than ChatGPT.

Afternoon: project discussion. I suggested lattice cryptography + homomorphic encryption if we were to do crypto, but the math was too hard, so rejected.

We continued with meltdown, even went to the OS lab machines to replicate. VMs were too laggy; only by 5 p.m. did we succeed.

Heard there were souvenirs at the central library, went to check, but arrived too late. Entry closed and prices were high.

Evening: tried binding school email to Gmail, failed. Rested a bit and continued discussion. Heard rumors that another group nearly finished meltdown, so we also rejected meltdown.

Finally, only software vulnerability testing was acceptable to most teammates. According to everyone's strengths, the plan was AFL+GAN. Naturally I was assigned AFL. After the meeting, slacked off until bed.

7/11

Morning: 3-hour crash course in networking, but shallow, nothing new.

Lunch: tried paying with the 10 SGD Grab wallet top-up, success.

Afternoon: consultation session, confirmed our group will do AFL+GAN. Hugh asked if we had datasets. One teammate showed him, and he immediately raised a key issue: if we want to fuzz, the code must be compilable—quite a problem.

Then went to central library again, bought souvenirs—three fridge magnets and two pins—for 20+ SGD.

Dinner: paid with Grab again. Only 0.7 SGD left in the wallet. Since the bound card only supports top-up, I ignored it.

Discussion continued: since finding a compilable dataset is hard, we simplified the project—first use ML to train a model (no need for compilable code), then for compilable code, run fuzzing to see if bugs exist, and let the model highlight likely bug locations.

After discussion I slacked again, so much that I forgot to shower.

7/12

Morning lecture: network-based attacks (ARP, DNS, DDoS, etc.), nothing new. Slacked off, installed Termux on my new phone, connected to my laptop.

Second half: IoT-like attacks. For example, flightradar gathers data this way. That was new.

Afternoon: cryptography lab. Lab1 was chosen-plaintext attack—definitely slow; the fastest way is reverse engineering + custom script. Lab2 was pure RTFM testing. Lab3 explored four block cipher modes; discovering that with OFB, ciphertext corruption only affects the corrupted byte and doesn't propagate—that was surprising.

Then we had to decide who prints the project poster. Shouted in the group for a while. Even offering Lab1 answers as reward, nobody replied. A bit discouraging (maybe they didn't read the group chat).

A student who didn't know how to do the lab asked for help, only to be thrown a copy of "How To Ask Questions The Smart Way". Pretty brutal.

Felt gloomy just going back to the dorm after labs, so with a classmate I went to central library again, bought an NUS T-shirt, then ate at UTown. We even walked to an off-campus supermarket to watch them buy snacks (I didn't buy any).

At checkout I tried paying with my all-currency credit card again—failed. Paid with a UnionPay debit card—success. Finally confirmed the nature of this Postal Savings Bank all-currency credit card:

  • Physical card = regular credit card - contactless pay
  • Virtual card = regular credit card + waived 1.5% fee

Basically unrelated to Mastercard. It's just a domestic credit card that waives currency conversion fees. Still, as a student being able to get one with a 10,000 RMB limit, I'm satisfied.

Carrying my heavy gaming laptop all day made my shoulders sore. Back at the dorm I decided whoever suggested the idea should do the printing.

As for the poster design, since none of us can use Photoshop, teammates tapped connections and found a relative with design experience to help.

Got a mechanical keyboard from a classmate—now I can play rhythm games, which made the evening great.

This time I did remember to shower.

7/13

Morning: wrapped up IoT attacks, then covered injection. Feels like tomorrow's lab might be tricky.

At lunch watched CNA news: China and the US quarreled again over cyberattacks. Another piece of news—over the past six months, the number of “tigers and flies” caught (anti-corruption) exceeded any full year before. (I thought crackdowns had slowed recently.)

Afternoon: consultation. We brainstormed ideas like symbolic execution and parsing AST to “train models,” but Hugh wasn't sure if that would improve results.

Afterward I started parsing AST from C language. I thought it was trivial, but most of the dataset couldn't compile, making it much harder. Kept at it until evening, still unresolved.

7/14

No class in the morning, woke up at 10. Tried parsing AST again, still no luck. Then heard in the group chat that Python vulnerability source code with AST already existed, so I ditched C/C++.

Afternoon lab files weren't emailed out. I sat idly playing Minesweeper, while others were already typing furiously. Then I realized requirements were posted on Canvas dashboard.

By then 10 minutes had passed. So Lab1 (detect internal IPs with telnet service enabled) was already too late to grab rk1.

Missed the whiteboard note, so I thought Lab2 wasn't doable and waited around. Lab3 (cracking WEP password with aircrack) also missed rk1.

Lab4 (interesting signal analysis) required STR hardware, which we didn't have. I wasted more time until I realized we had to pick it up ourselves.

While doing Lab4, Lab2 was fixed, but I still didn't grab rk1. Continued slogging through the labs.

The BUPT student whose blog I linked earlier (ID MuelNova, shortened to Nova) messaged me to confirm the signal frequency, and also told me the secret software's name (I was originally planning to use GNU Radio Companion—still, thanks to him).

I was too lazy to RTFM, so I asked ChatGPT about the parameters. The answer didn't work on the lab computer, but after installing the software on my own laptop, it worked and I grabbed rk1.

As thanks, I helped Nova debug his issue. After he got rk2, he said he needed project hardware from Hugh, so I joined him.

The chat with Hugh was pleasant. Nova discussed setting up wireless APs on Raspberry Pi and potential project directions. I told Hugh C-to-AST failed and that we might switch to Python, so fuzzing wasn't possible. Hugh surprised me by saying Python also has fuzzers. I also asked about test setups and rainbow tables. Hugh explained rainbow table time and space complexity are both O(n), a perfect trade-off—something I'd never considered (I thought it was O(1) time and O(n) space).

After that it was dinnertime. I thought “fried stew rice” would be fried rice with something extra, but it turned out to be watery rice soup—my least favorite. At least it worked as an evening diet.

7/15

Gathered at 10 a.m. to visit Little India. Besides the curry smell, there was also incense.

First stop was the market for souvenirs. Prices in India shops were cheaper than in China.

By noon we worried about hygiene at Indian restaurants, so we planned to eat in Chinatown.

Unfortunately, we took the wrong MRT line. Still got there, but with ~4 extra stops. Solved lunch with a nearby McDonald's.

In the afternoon, hid from the scorching sun and walked around Chinatown. Turned out similar to Little India—same shophouse architecture, just signage switched from Tamil to Chinese. After checking in at “Lucky Chinatown,” we went to Gardens by the Bay.

Inside was the paid attraction Flower Dome. Original price 30 SGD, but a classmate bought via Ctrip for 91 RMB with Supertree tickets included. That saved our group nearly 300 RMB.

Flower Dome was indeed worth it, except the rainforest corner had gross plants (like pitcher plants). Everything else was eye-opening.

Finished by 3:40, half an hour earlier than expected. We visited Supertree briefly, but since tickets were required and our SkyPark wasn't booked, we didn't have time. The light show was at 7:45 and 8:45, but clashed with National Day rehearsal, so postponed.

Joined the rest at SkyPark, waited until 4:45 for one classmate—annoying.

SkyPark has 57 floors, observation deck on the 56th. We started waiting at 5. Around 6, helicopters flew with the Singapore flag. Around 7, fighter jets performed again (louder than last week). At 7:45, we could see the Supertree light show from above—not impressive, so no need to come again.

The fireworks we had been waiting for started exactly at 8:15 and ended at 8:20. Recorded all five minutes. Afterward the whole place was smoky (PM2.5 definitely off the charts). Then people suddenly rushed in one direction—I followed, only to realize they were racing for the elevator.

At ground level I planned to eat at the dorm canteen, but the others insisted on a hawker center. They said it was cheaper, but what we got was overpriced and bad. Lesson learned: following groups has downsides.

On the MRT back, the Downtown Line train had issues—it didn't open doors at the station before the Circle Line transfer. Eventually it did, but we decided to get off for safety and walk to the transfer. After that, Circle Line was fine.

Returned to dorm past 11 p.m., completely exhausted.

7/16

Woke up at 10 a.m., did nothing productive.

At lunch remembered the giffgaff SIM had been shipped a week ago. Checked the mailboxes, didn't see my name.

Looked at the official site: non-European countries take at least five business days. A blog even said for China addresses it could take a month, with a 75% loss rate. So I applied for two more free SIMs, sending them to different locations, hoping at least one arrives before I leave.

The afternoon was mostly wasted too, until suddenly a glimpse popped into my mind of a video I had seen long, long ago. I wanted to recreate it on this screen in front of me.

Key points from memory:

  • It has a clock
  • It shows the life of a human
  • The size of the clock changes during life's process
  • The background is blue

Asked ChatGPT, but its Bing plugin was temporarily down due to full capacity. It suggested Google or video sites. Unfortunately, searching Google, YouTube, Bard, New Bing with those keywords yielded nothing. After an hour, finally on Bilibili, sorting by newest, flipping backwards through pages, I found something similar.

It turned out to be a game playthrough: Chinese name 生老病死, English name and everything started to fall, developed in 2009, only playable on 4399. As everyone knows, 4399 games need real-name verification, and being so old, both Flash and H5 versions exist.

I first used an anti-addiction plugin to open the H5 version. It was laggy, so I decided to try Flash. Tutorials said extracting Flash games requires a CRX plugin. The only browsers supporting both Flash and CRX are Chinese-made ones.

So I downloaded 360 Extreme Browser on a VM, used the plugin to get the SWF file, copied it to my host, then grabbed a standalone Flash debugger from WebArchive. Played through it, and the afternoon was gone.

Sadly, the original video might be lost to history. But the content is roughly similar, so that's enough.

At dinner I checked the mailbox again—still nothing. Fine, I'll wait until next week.

Evening: looked into Python fuzzing. The pythonfuzz Hugh recommended had already been archived and doesn't support Python 3.10. Found frelatage as a better alternative; its UI feels like AFL. But the Python dataset for training is messy—some lack parameters, some can't run independently—still painful.

7/17

Morning lecture covered a mix: SWIFT, Kerberos, voting algorithms, IoT. Nothing memorable. Preemptively did Lab1 (SQL injection) in advance, probably grabbed rk1.

Between classes I told teammates Python fuzzing failed. One suggested converting the Python dataset into AST. I tried a random broken code snippet, and surprisingly it worked—even with errors. That made me happy.

Thought afternoon's lab wouldn't need in-person, so I napped until 1:50. Turned out the PDF had been released right after I fell asleep—missed it by an hour, rk1 gone.

Lab2 was XSS. Instructions spanned more than a page. Reread several times before understanding. Then spent ages debugging my XSS script—only realized after browser errors that I'd misspelled document.location. The whole ordeal wasted an hour.

Complained to Nova, who only replied with a “?” and a “6” (Chinese internet slang meaning “impressive in a sarcastic way”). Annoying. But then I remembered after the Gaokao, when reading Zero to One, I couldn't understand the XSS section at all—so in a way, I've come far.

Lab3 was a Slow Loris attack. One question asked the server version—but I was in the dorm! Asked Nova, and he said he went to the lab just to check it. And that was the only offline requirement. Ridiculous.

Lab4 was CSRF, marked “not graded, group work,” so I ignored it.

Spent half an hour learning Python AST syntax. Wrote code to convert a dataset, uploaded it to GitHub, done.

Evening: helped tiger1218 test a challenge. After that, back to slacking.

7/18

Woke up at 6:42 a.m. from thunder. The flash-to-thunder gap was less than a second, so the storm was close. Covered my ears with the blanket and went back to sleep.

Morning finally returned to familiar ground: computer organization, OS, stack overflow, heap overflow, and real-world mitigations.

During class my teammate said the AST dump had too many irrelevant elements, so I should only keep node contents. Like yesterday, I spent the second half of class coding—100+ lines—to produce a clean AST in JSON, replacing the old dataset.

Afternoon consultation: Hugh told us to start writing the paper, and also consider time for video, poster, and presentation. (Pressure's on now!)

Back in the dorm, set up Overleaf, uploaded a sample TeX file. Compiled fine except images wouldn't load. Then slacked until dinner.

Dinner: went alone to a Japanese restaurant in UTown. QR ordering, payment through Stripe (yes, the same Stripe that OpenAI uses). To my surprise, my all-currency credit card actually worked!

Evening: tried fixing the Android stock browser packet capture issue, but midway tiger1218 called. We chatted for two hours. Learned that one of my seniors is at NTU, so we arranged to meet tomorrow.

7/19

Woke up at 10. Switched approach for packet capture: root a device with Xposed.

So I installed Waydroid on my PC, then Magisk. But installing Xposed required recovery mode, and I couldn't figure out Waydroid's equivalent. Stuck there.

At lunch saw on YouTube: Claude 2.0 released, completely free. Registered immediately via UK proxy.

Afternoon: did the last lab.

After finishing, met my senior for dinner at NTU. Campus was nice, but honestly, NUS feels better. I asked about NUS graduate programs—he said back then 8–9 people applied for pre-admission, only 2 got in. Now it's even tougher.

Back in the dorm, wrote Lab4 (ret2libc). Definitely simpler than Lab3.

7/20

Final class in the morning: side-channel attacks, rainbow tables, quantum crypto. Then MCQ test—20 questions, finished in ~10 minutes, submitted early to eat lunch.

After checking answers, realized I mixed up spoofing and MITM—lost one point. (Which led to a MITM crash course right after.)

Afternoon consultation: Hugh told us again to start working on the paper, poster, and video. I spent an hour and wrote about one page (target length: 4–6 pages). My part was done.

Then visited the NUS Museum as a group. Most exhibits were Chinese antiquities. On the third floor, some abstract art I couldn't understand. Honestly less interesting than most random museums in China.

Planned to visit the Natural History Museum after, but missed the 4:30 last entry by a few minutes.

Ate at UTown, then back to dorm. Felt tired, slept from 6 p.m. to 9 p.m. After showering, remembered the packet capture issue. From 10 p.m. to 4 a.m., finally captured the Bank of China link.

7/21

Woke up around 9. After breakfast, planned to write a blog about last night's packet capture. Then the dean announced a group photo at 11 (later corrected to 12) at SoC—but sent the address of a NUH cafeteria?! I went to NUH, waited 10 minutes, then learned everyone else was already at SoC.

Problem: no direct shuttle from NUH to SoC. Had to transfer, arriving after 11. Neither the dean nor teacher was there.

I decided: never again will I attend unofficial group gatherings.

Afternoon consultation again, but we already had a clear plan. Didn't go. Instead helped tiger1218 set up a Google Cloud server with $300 free credits. GCP web console is awful. Worse, I forgot to open port 22 when installing ufw, had to redo everything. Finished around 6.

Dinner: bought instant noodles at Pick&Go. Ran into teammates who wanted to go to East Coast Park, so I tagged along:

7/22

Morning remembered yesterday's laundry. Feared teammates might trash it. Rushed to the laundry room.

Good news: clothes were untouched. Bad news: after 24 hours, still damp, starting to stink.

Told myself the smell would fade, so I hung them in my dorm.

Morning: finished blog backlog. Afternoon: team hosted a CTF. Tried a misc zsh challenge, couldn't solve.

Evening: went to Sentosa alone. Arrived at the beach as sunset lingered. Pixel's night mode made it look like time reversed 20 minutes—very satisfying.

Back in dorm, opened the door—the stink had spread everywhere. Showered, then rewashed both the smelly load and the day's clothes, waited half an hour by the machine.

While waiting, ML results came in: source code accuracy 90%, AST accuracy 52%. Better than I expected (thought both ~60%). But all my AST work ended up wasted.

7/23

Looks like the giffgaff SIM will never arrive.

After lunch asked Nova—turns out their group also switched to ML.

Afternoon: adjusted paper formatting, fixed some errors in both the paper and poster, submitted the poster, left the paper to Hugh for checking.

Evening Hugh told us to use a spell checker, but checking Overleaf's red underlines showed they weren't spelling errors.

The rest of the time: pure slacking.

7/24

Daytime: added the ML training code GitHub repo to the paper abstract, then submitted both paper and video.

Teammates said the poster quality was quite good. Seemed like our group was the first to put one up.

Evening: went alone to West Coast Park to catch the sunset. Official sunset time was 7:17, I arrived at 7:22—just missed it. Still, the afterglow was beautiful (earlier than Sentosa by ~20 minutes).

On the way back I tried walking without navigation, just by instinct. Ended up almost circling the entire campus—no regrets left.

7/25

Morning showcase: after seeing the other seven groups' posters, ours felt only mid-level.

Other teammates either didn't know the principles well enough to explain or wandered off to look at other posters. So I was left explaining.

When the big boss of our workshop came, I explained sitting down. He told me to stand (in Chinese). I instinctively switched to Chinese explanation, but then he asked me to switch back to English. Awkward moment.

After he left, more students came by. A few asked sharp questions:

First answer was on the poster. I knew enough about ML to answer the second. The third—I had no clue.

Near noon, the ML-savvy teammate came back and took over. Nova told me some fun 2D game projects were nearby.

I tried one, similar to Sokoban. Played half an hour, down to two levels plus a hidden stage, before the showcase ended. When I returned to our classroom, desks and chairs had already been reset—my 2B pencil was lost.

Afternoon: had to attend farewell dinner at 3:30. Before that, I used a GitHub A* Sokoban solver to clear the remaining levels, just in time.

(Teammates said I was fast.)

Evening dinner included awards for outstanding projects. Our group grabbed two minor awards:

Then the top three projects were announced. As expected, we weren't in. The two groups I thought were best indeed made the list.

After the event, ran into the student who had asked sharp questions. My instincts said he was worth connecting with. After chatting, I learned he was from Wu Institute. Digging deeper, discovered our political spectrums were similar (he leaned further left than me). Ended up building a new connection—worthwhile.

Back in the dorm, packed up a bit, went to bed at midnight.

7/26

I actually never managed to fall asleep. First, the political discussion with the Wu Institute student left me with a lot to reflect on. Second, the thought of flying out made it impossible to rest.

Woke up at 3:20 a.m., packed, then took the shuttle to the airport. Picked up some duty-free cosmetics for my sister (RMB 2400+ original price, RMB 1737 duty-free).

After one transfer, I finally arrived home safely at 7 p.m. Slept 11 hours that night…

Results

(updated on 8/15/2023)

In the end, I only got a B. Honestly, I was a little disappointed.

Hugh's feedback could be summarized as: not enough depth, too little substantive content in the paper, and insufficient demonstration of workload.

While working on the project, I often felt like I had energy but nowhere to apply it. I did try to contribute actively in group discussions with the “leader” (the teammate who suggested the ML idea) and did my part. But overall, even though no one slacked off, the actual amount of work from each member—including myself—was still quite limited. (For me, partly because I was never that enthusiastic about ML; I often preferred spending time on things that interested me more than the project itself.)

One teammate's assessment was probably accurate: the project never had a true leader. My role ended up being more of a supportive contributor rather than a driver.

Sigh. Perhaps this was the tradeoff: between travel and grades, between 5380 SGD and the overseas experience and connections gained.