Define the problem first
It's been an year since I last paricipated in Advent of Code in 2024 using Clojure. This year, I decided to use Golang for solving the problems so that I can get to know Golang's standard library and features better. It is my first time writing Golang code seriously, I was only able to read some Golang code before but never wrote any significant amount of code in Golang.
I was focusing on learning Golang itself, but at the same time, solving problmes recalled me of problem solving skills and algorithms itself as well. I have tried 10 days out of 12 days, and I have solved 18 stars out of 24 stars.
My goal wasn't to receive all the stars, but rather to get familiar with Golang and have fun solving problems. So, 18 stars is enough for me this time. Thanks to Advent of Code, I enjoyed time in December again this year.
I have uploaded my code to Github. Looking forward to next year's Advent of Code as well!
The funny thing is that I mentioned in my previous year's post that I would consider participating about 2 weeks next year. This year, the author decided to release only 12 days instead of full 25 days for some reasons. So, I ended up doing about 2 weeks that I expected!
I'm a Senior Software Engineer at Unity, working on Tapjoy Offerwall, a ad solution for mobile games and apps. In this post, I want to demysify how online ads work, especially in the context of mobile games and app. It won't cover every detail but will give you a solid understanding of the ecosystem, the players involved, and how it all comes together. Plus, I won't explain Offerwall itself, but rather focus on the broader ad tech landscape that makes it possible.
When you play games or browse the web, you see ads everywhere. I knew that ads are everywhere but I didn't know how they really work even though I have been working on the Ads team. This article is for those who want to understand the ad tech ecosystem. I will explain key actors, how they interact, and the techonology behind it with top-down approach. I wish you will get a better understanding of how online ads works after reading this post.
There are key players in the online advertising ecosystem that work together to deliver ads to users. Here's a high-level overview:
That's a lot of jargon, but don't worry. I'll break it down in the following sections. Before that, here's a high-level diagram of the ecosystem:
flowchart TD
Advertisers -->|Create Ads| AdNetworks
AdNetworks -->|Distribute Ads| Publishers
Publishers -->|Show Ads| Users
Advertisers -->|Buy Ad Space| DSPs
DSPs -->|Bid on Inventory| AdExchanges
AdExchanges -->|Sell Inventory| SSPs
SSPs -->|Provide Ad Space| Publishers
MMPs -->|Track Performance| Advertisers
sequenceDiagram
participant Advertiser
participant DSP
participant AdExchange
participant SSP
participant Publisher
Advertiser->>DSP: Submit Ad Campaign
DSP->>AdExchange: Bid on Ad Space
AdExchange->>SSP: Auction Ad Inventory
SSP->>Publisher: Provide Ad Space
Publisher->>User: Display Ad
User->>Publisher: Interaction (e.g., click)
Publisher->>SSP: Report Interaction
SSP->>AdExchange: Update Metrics
AdExchange->>DSP: Notify Results
DSP->>Advertiser: Campaign Performance
Well, I just come up with a few interviews that I failed. When I look back, I had interviews a lot of times when I switched jobs at the early stage of my career. As I get experienced, the number of interviews was getting less and the difficulty was getting easier but I still remember that I failed some interviews.
Here is the thing. As a result, the failure was not a bad thing. Thanks to those failures. When looking back, I'm realizing that I was unprofessional and immature back then. I didn't know what they wanted and didn't think about the career path and goal.
Anyways, I got a chance to move on a better company and a better job in my perspectives. Every places where I worked gave me a lot of opportunities to learn and grow. I am grateful for that.
First company tought me general knowledge of the industry, coding, machine learning, software engineering, and project management. In the second company, I wrote a thousands of thousands of lines of code and that was the most immersive experience I've had. In the third company, I learend communication skills and how to deliver features on the top of ongoing projects. In the fourth company, I realized what kinds of colleagues and products I want to work with/work on. In the fifth company, I experienced a functional programming and a manager role. In the sixth company, I saw how to work like Google — but not at Google. In the current company, I'm going through how to make money from the product in huge projects.
The domain, the number of employees, the structure, the average age, and the nationalities — everything was different from company to company. But one thing is certain: each of them gave me valuable experiences. I'm always grateful for the journey I've been on.