cho.sh
2,244 notes
Liked on XI made a mistake. When Jack and I decided to organize this $100K Hackathon, my biggest concern was cheating. Unlike a regular hackathon, everyone participates from home. And because the winner is whoever makes the most PROFIT (not revenue), there are so many ways to manipulate the numbers. So I added a $99 entry fee. One thing I’ve learned from building businesses is that people tend to be more committed when they pay for something. I thought it would filter out spam, attract serious builders, and make the competition fairer for everyone. But I completely missed the other side. 3 years ago, I was a living with my apps. Today, I’m financially free. My life changed so much that somewhere along the way, I lost perspective on what $99 means to someone else. For someone in India, someone struggling to pay their bills, or someone trying to make their first dollar online, $99 can be a lot of money. And those are exactly the people I want to help! I’ve spent years sharing what I’ve learned, reviewing random people’s landing pages, and organizing free meetups around the world. Not because there’s money to make, but because I genuinely love seeing people build things and succeed. And somehow, I was so focused on keeping cheaters out that I didn’t realize I was also keeping genuine builders out. That’s my mistake. So I’ve decided to make the $100K Hackathon completely FREE :) Everyone who already paid got a full refund. I’m still worried about cheating. That problem hasn’t disappeared, and Jack and I will have to figure out better ways to verify profits and keep the leaderboard fair. But that’s our problem to solve. Thank you to everyone who shared their thoughts. Sometimes you need people to remind you of things you’ve forgotten. I genuinely hope this hackathon changes someone’s life. ❤️Liked on XIt’s time to bring back Cafe CursorPosted on Xyo @pendev i can't live share edit a .pen file? it's the most needed featurePosted on XI'm coining a word "Agentsplaining" Agents condescendingly assuming the user don't know fuck and repeating the obviousReplied on X@jayhxmo @raycast Hard to explain. It's the small detailsPosted on X@raycast iOS keyboard is insanely good. Might resub Raycast pro just cuz of thisReplied on X@ishuagra02 I saw a theory that F5.2 is a post train of 5.1, but O5.5 is a distillation of F5.5(unreleased new pretrain) and thats why O5.5 > F5.2Liked on X@anaclumos don't know what is actually improved 👀Posted on Xam i the only one underimpressed with 5.2 fableReplied on X@bvvst great minds think alike https://t.co/YRFWhb1mcOLiked on XClaude Fable 5.2 is out and it's the perfect time to run this god-level prompt on your codebase: "I want you to audit our codebase, is anything here unnecessary, overly complicated in our current setup, or based on weak assumptions? Challenge them. - What can be deleted entirely? - What can be simplified now that unnecessary pieces are gone? Then make the changes. Prefer deleting over simplifying, simplifying over optimizing, and optimizing over automating. This product is being used by thousands of customers, do not cut any corners." This prompt is one I run often and leads to the best results.Replied on X@akshayadinesh19 @bot can we please BYOM for botsLiked on XTo be fair, the Chinese models have a much lower refusal rateLiked on XF*CK IT, im creating a library of AI slop indicators. my feed is full of taste larpers. stay tuned https://t.co/5Muv8nQRm3Liked on XJENSEN! THATS NOT WHAT WE MEANT BY CHINESE MODELS!!!!!!!Liked on Xmy parents had to declare bankruptcy when I was a kid, so they had every reason to pressure me towards a more stable career path instead, they were so patient with me, even as i failed startup after startup for years so getting to tell my mom that everything turned out okay was a really special moment :) for those who can't read Korean, her first message roughly translates to: "Really!!! Congratulations my son. So much :') Thank you God!" i know I've been posting about my exit for like a week now, but it really is a big deal for me and my family! i'll share more about how this all happened and some tactical advice later this week, but for now i'm just riding out all the emotions to quote my mom, thank you God!!!!Liked on X@thefarmers_Dog it stands for Egg GzampleLiked on X🦍 Introducing Memorilla: memory as a modality for LLMs Memorilla turns everything a frozen LLM needs to remember into just 16 memory embeddings ⚡ It uses up to 4,212× fewer tokens and is 27× faster than full context inference while more accurate 🎯 Pushes the Pareto frontier over RAG and agentic memory in personalization, long-document and knowledge QA A thread 🧵:Liked on XThere's a huge product opportunity downstream of Tailscale etc too. At @tldraw we've started designing for "high trust networks" and it's been a beautiful thing. 1. Features that would be a nightmare on the internet are okay on my computer and mostly okay on private networks. Websites that execute user-generated scripts, control production systems, allow for users to send desktop notifications, spend tokens, or directly prompt my agent. Crazy stuff that would only make sense if everyone was in a committed polycule. 2. When everyone on the server can be trusted to have _external_ reasons for good behavior (eg keeping their job, or maintaining friends, family, church, mafia org), the software can be designed in a default social way. Most apps default to isolation, low horizontal visibility, highly restricted collaboration. Makes sense if the social contracts are inside of the app, but if you can trust that they live outside of the app then you can get wild. Example being small group chat names as an emergent comedy phenomenon because anyone in the group can change the name. 3. This can work for commercial products, too, not just internal stuff. Security matters more than ever but the way we've seen that manifest is that more companies are more confident in their own solutions than anything we could provide, to the point where owning data and access is a better value proposition than having it managed. Always has been true for big companies but now even small companies can get a good secure network set up pretty easily, and the hooks we need to build are easy enough. tldraw offline got us started down this road (and shout out to @pendev for first introducing me to the idea of desktop + mcp). We've been bringing that product to private networks and it's been exciting to see how much we can get away with. Keep an eye outReplied on X@saradu birds eye viewLiked on XApplications close in 2 days!! If you have a cool bio idea, and $5-10k will go a long way for you, please apply!!! https://t.co/NCvmrNC53cLiked on XWe've been early adopters of Rust since 2018 and a lot of our infra, voice tech, and even some of the current client is already Rust, the holy grail was getting the whole client there. That means Electron goes away, and so does React Native, mobile keeps native UI but shares app code with desktop via Rust. We hope to get it into testing with users soon™. (And it's not Tauri, it's GPUI, so good guess everyone.) Alright, back to staring at the WoW Forever login screen.Reposted on XOh boy. https://t.co/X7SSskGuGvLiked on XRIP .si domain squatters
Woowa Tech Camp 3rd Review

Woowa Tech Camp 3rd Review

Warning

Over a year old. May be outdated

Woowa Tech Camp 3rd Review

A 2021 review of a camp that ended in August 2020 is a bit late, I know. But the 4th recruitment is open right now, and if I don't post this now I probably never will. Most of what's online only skims the surface, so I'll stick to the things I was curious about when I applied.

Woowa Tech Camp is a summer programming course where you intern at Woowa Brothers, the tech unicorn behind Baedal Minjok (배달의민족, a.k.a. Baemin), and learn how real development works. 30 people get in. Competition is about 43 to 1.

Sushi Bar Lounge

No shoes allowed. The so-called Sushi Bar Lounge, first come, first served because of the view.

🔋 Selection Process

Application

Each question had a 700-character limit.

  • What do you think are the virtues of a developer, and in light of this, what aspects of yourself do you think make you suitable to work as a developer?
  • Please freely describe why you want to participate in Woowa Tech Camp.
  • If you have your own programming learning method outside of the curriculum, please describe it.
  • Describe an experience where you faced difficulties in the collaboration process and what efforts you made to overcome those difficulties.

2020 3rd Recruitment Banner

1st Coding Test

Typical coding test problems. I solved them in JavaScript, I think. I'd been grinding tests for Programmers Summer Coding and Woowa Tech Camp at the time, so it wasn't too bad. 4 problems, 150 minutes.

2nd Coding Test

Build an admin tool with specific features in their VS Code web environment. Boilerplate, build, and CI/CD were already there, so you could get it running right away from the README, and we had to build 3 core features on top. No external libraries, vanilla JS only. 4 hours sounds long, but it wasn't enough for me. I'll skip the details, since the staff said they couldn't be shared... 😭

Interview

30 minutes online, because of COVID-19. Not a hiring interview, so instead of deep technical questions they mostly checked whether we had solid programming basics, were ready to learn at camp, and would be good campmates. I'd mentioned this blog in my application, so they asked a lot about .

Competition Ratio

I was curious about the competition too. Here's what I found out later.

  • Total applicants: 1300+ (43+ times)
  • Passed application and 1st coding test: 500+ (17+ times)
  • Passed 2nd coding test: 90 (3 times)
  • Passed interview and final acceptance: 30

The interview room at Woowa Brothers. Originally, the interviews were supposed to be held here, but due to the spread of COVID-19, they were conducted via Google Meet.

🏫 Curriculum

  1. Orientation Period (3 days)
  • Mini Project: Implementing a web server without Express and HTTP.
  • Study Keywords: Node.js, JS OOP, Asynchronous Programming, Async Cafe, HTTP Specification, HTTP Basics.
  • Our Team's GitHub

F63DD7 B25CF2 7CE6C6

The Small House, where the orientation took place. It's in Jamsil.

  1. Baemin Mart Project implementing login (1 week)
  • Conditions
    • Use only vanilla JavaScript.
    • Implement authentication directly without using authentication systems like Passport.
    • Implement the DB directly using the file system without using a commercial DB.
  • Study Keywords: HTML, CSS, CSS Layout, Express.
  • Our Team's GitHub

8F3A1D A98162 A1A228 93DAB3

The Big House, the main stage of Woowa Tech Camp. A 12-second walk from Mongchontoseong Station.

  1. Trello Project directly implementing a Kanban board (2 weeks)
  • Conditions
    • Use only vanilla JavaScript.
    • Directly configure and utilize Webpack.
    • Drag & drop must be implemented, but it should be done directly using event bubbling, event capture, and event delegation without the HTML Drag and Drop API.
  • Study Keywords: Webpack, ES Module, DOM API, Templating, Fetch-Promise pattern, JS Event Delegation, DBMS, MySQL, SQL Syntax.
  • Our Team's GitHub

Cafe

Cafe View

The cafe on the 18th floor of the Big House and the view of Olympic Park from the cafe.

  1. Bank Salad Project directly implementing a household ledger app (2 weeks)
  • Conditions
    • Use only vanilla JavaScript.
    • Directly implement a single-page application using vanilla JavaScript and the History API.
    • Implement CI/CD directly without using commercial solutions.
    • Implement OAuth.
    • Draw graphs using SVG, canvas, etc.
  • Study Keywords: Observer Pattern, ERD, OAuth, Passport, State Management, Immutability, Transactions, Shell Scripts, CI/CD, CSS Animations & Optimizations (requestAnimationFrame & requestIdleCallback), SVG, Canvas.
  • Our Team's GitHub

Pair Programming

We occasionally did pair programming. The code you see now is...

  1. B Mart Project directly implementing Baedal Minjok's B Mart (3 weeks)
  • Conditions
    • Use Vanilla React.
    • Utilize AWS VPC.
    • Utilize S3 image storage.
    • Utilize the Elastic Search, Logstash, Kibana (ELK) combination.
  • Study Keywords: React Hooks, AWS VPC, React Router, React Context API, React useReducer, AWS IAM, AWS S3, React Test Codes (Jest, Enzyme, ...), Elastic Search, Logstash, Kibana, ELK.
  • Our Team's GitHub

During the 4th project, social distancing was raised to level 2, so we had to proceed remotely.


✨ The Good Parts

First, we got a stipend of about 1.5 million won a month, plus gear (a MacBook Pro 💻 and a monitor 🖥).

MacBook

Monitor

Everyone got a loaner 2019 16-inch MacBook Pro, the high-end i9 model. 16GB RAM, 1TB SSD, Radeon 5500M 4GB GPU. At the time of the 2020 camp, that was the highest spec you could get without CTO. One ThinkVision QHD monitor for every two people, 15 in total. I thought that wouldn't be enough, but there were plenty.

👨‍💻 What the heck is (for beginners) good code?

js
// Load activity log to right sidebar
async function addActivityLogToActivityLogList() {
  let activityLogList = document.getElementById("activity-log-list");
  activityLogList.classList.add("activityLog");
  activityLogList.innerHTML = "";
  let userList = await api.User().getAllUsers();
  userList.reverse();
  console.log("There are currently [", userList.length, "] users.");
  userList.forEach((user) => {
    let activityLog = document.createElement("li");
    activityLog.classList.add("activityLog");
    let date = new Date(moment(user.created_at).format("YYYY-MM-DD HH:mm:ss"));
    activityLog.innerText = user.userId + " joined on " + date;
    activityLogList.appendChild(activityLog);
  });
}

The original code can be found here.

Uh - this is not in a state to be reviewed. Who wrote this? Let's have a talk.

That was the feedback on my code, picked at random and put up on the screen at the code review session on Friday afternoon, July 25th, at the end of the 2nd project. I thought I'd handled the brutal time pressure pretty well and built a page that worked fine. Getting hit that directly was a shock. Text doesn't do it justice, but the room went completely frozen.

I thought about a million things on the train home that day. Once I calmed down, I realized a camp that just said "Okay, okay~ we all did great and worked hard~" wouldn't be a good camp. A workbook needs problems you get wrong. So I decided to lean on what I was relatively good at and soak up as much as I could in the month left.

Juniors studying programming hear "clean code, good patterns" all the time. From a beginner's point of view, hearing it that often makes you repeat it on autopilot, like memorizing, with no real sense of what good actually looks like. Looking back at that code

  • It does two jobs at once, ① fetching information and ② displaying it. Tight coupling, and tight coupling means major surgery when you need to swap out part of it later.
  • Logic and view are mixed all over the file. Hard to read.

After that advice, I paid a lot of attention to these patterns from the 3rd project on. I turned part of it into a mini-project, which should give you a feel for it.

🛷 Dunning-Kruger Sledding

A bit of a cliché, but I got to experience the peak of ignorance firsthand. I never thought I knew everything, but I'd done a fair number of JavaScript projects, so I dared to think, "Sure, I'll have to work hard, but I can probably keep up without too much trouble, right?"

I don't know anything about JS. I'm just a talking potato. You know what I mean?

Of course, the camp was extremely hard. The curriculum was designed to put constraints on each project and then let you fix what those constraints made painful in the next one. Auth without Passport, then finally Passport. The flip side is this happened every 1 to 2 weeks. The moment you barely got the hang of one technology, you were on to the next and climbing a steep learning curve all over again.

It felt like sledding down the Dunning-Kruger curve. I wasn't fluent enough in JavaScript to do whatever I wanted with it, so I really had to grind to keep up.

🌎 What does it mean to know in the internet age?

I also thought a lot about what it means to know something when you can just search it. For programming at least, I think I found part of an answer. I call it GSPH, Googling Sessions Per Hour. A Googling Session is a deep search that takes more than 5 minutes. For example, if you couldn't remember the name of a JavaScript property function and completed the search in 2 minutes, it wouldn't count. If OAuth doesn't come to mind easily and you have to look at the documentation for 10 minutes, it would count.

Search for it... but every time?

At roughly 3 or fewer an hour while doing a task, I think you can say you know the concept. Quick searches in the middle of a task don't mean you don't know it. Looking up every single step means you need to study more.

👾 Library ≠ Alien Technology

Frameworks and libraries sometimes get treated like alien technology. Sure, well-known ones are collections of proven, efficient code. Treating them as untouchable alien tech and leaving every decision to the library is a bit dangerous.

A developer doing npm i

Web libraries in particular are built on plain JavaScript, the same JavaScript we write. The camp kept stressing that instead of blindly relying on external libraries, we should know how they work and where they could go wrong. If it came to it, you should understand a library well enough to build something like it yourself.

Libraries are Terran 🧑‍🔧 technology, not Protoss 👽 technology.

Take the left-pad incident from 2016. An 11-line library called left-pad was pulled from npm, the dependency chain fell like dominoes, and the babel transpiler stopped working. Wasn't that also a case of leaning way too hard on simple code anyone could write in a few minutes?

As a hobby developer you might think, "Huh? Babel is super reliable, hundreds of thousands of people use it. I should worry about my own code instead." But for a company that loses a fortune when the service is down for even 30 minutes, this matters. Libraries aren't unknowable alien tech, and they're not something to pray to. They're services that can break at any time.

🥳 Fun Experiences

🧩 Crawling Baemin's Image Server

While building the final B Mart service, we needed a ton of Baemin's B Mart data, mostly photos to fill the image slots so it would feel like the real app. Drawing on , I scraped the image resources off Baemin's server (with the staff's permission).

A photo sneakily taken from Baemin's B Mart image server

Strictly speaking the images sit on an open CDN, so this isn't hacking Baemin's server. The catch is the endpoints and image addresses are hidden in a way you can't just guess.

text
http://CDNdomain.baemin.com/some/thing/1abcde23-very-long-alphanumeric-address.jpg

The final image CDN URI looks roughly like that, and opening it shows the image.

This wasn't shallow crawling where you open the B Mart web view and grab things with CSS selectors, and the camp didn't hand us internal server data either, so it took real effort. I intercepted the iOS Baemin app's traffic to find the endpoints and image addresses, and with a bit of CTF I worked out the list. I pulled about 1,000 images, icons, sound effects, and so on from that server and put them in a private repository for the other campers.

Crawled result

🏢 Whirlwind Corporate Night History

In between, we heard behind-the-scenes stories from Korean companies. How a certain game company barely uses RDBs and dumps binaries instead because hundreds of thousands of items get mass-produced. How someone once edited game DB fields to duplicate items worth hundreds of millions of won, so DB access got very strict afterward. How developers at a certain accommodation company could see every member's personal info, so for a while they freely looked up celebrity members... I'm really into how companies work, so these were fascinating.

The day the neighboring N company's C Foundation's B Camp exploded

⚡️ Synergy x Synergy = Synergy3

Still, I think the best part was meeting the other campers. I kind of got what people mean when they say the best perk is great coworkers. Above all, I want to talk about jhaemin.

At the start of each project, the camp hands out design drafts and planning docs. But they're only suggestions, and you can build whatever you want. Making the design more usable and better looking is entirely up to the campers. At first I thought the design was something you had to follow, but it wasn't. As if to hint that good coworkers are the ones who find work and do it, everything was open. Improve the design, add features, or even cut something. Great power, great responsibility.

For the design mindset of a front-end developer, jhaemin influenced me a lot. I learned so much watching him spin up usable web apps fast on his own solid design system. Look at the 2 sites that blew my mind and you'll see what I mean.

Inspired, I tried redesigning things myself starting with the 3rd project, Bank Salad. Here's how I completely reworked the design ↓

The provided household ledger design draft. This draft is just a starting point, and it's entirely up to the camp participants to unleash their creativity from here.

I realized design is a more fun task than I thought (quite satisfied)

What I like about my design is ① it uses the wide screen fully by splitting things into , and ② the activity log on the right runs independently, so the contents of the right window are maintained even when freely moving to the calendar, statistics, and payment method management. Kind of like Slack?

And there was so much more to learn from people like naamoonoo who created a pseudo-React with vanilla JavaScript, pigrabbit who completed Elastic Search over the weekend, dnacu who handled React as comfortably as breathing, younho9 who quickly implemented the SPA structure and singleton pattern with just JS, 0407chan who systematically implemented the data access strategy, Jenny who finished the design structure overnight, and more.


🎬 Odds and Ends

  • First time really collaborating with Git and GitHub. Solo, you rarely get to use branch and checkout properly. For Git collaboration, I think I got to GSPH < 3.
  • The lectures were really good. Every Wednesday they showed interesting parts of how Baemin builds and runs its services. especially stuck with me.
  • Getting a taste of company life was great. Company life at 21!
  • The hyungs and noonas who taught us really knew their stuff, and they were considerate of me. There were plenty of fun activities too, but sadly COVID-19 cut a lot of them.
  • A truly precious experience, and I learned a ton. If my fundamentals had been a bit stronger I could have gone much deeper, so I have a few regrets there. Still, it's a real asset for whatever comes next.
  • Of course I won't be perfect right away. I've been feeling the gap between ideals and reality lately. Still, if we point our compass at our ideals and keep walking, I have a little faith we'll get there someday 🧭
📚 More Resources

The End!

Backlinks1