Let me share some of themπ
1. Lizard People Rule the World
2. The Earth is completely hollow inside, with hidden civilizations, giant creatures, and entrances at the North and South Poles.
3. Australia Doesn't Exist
4. The Titanic Never Sank
@devwitheyob
#TechVibe #random
1. Lizard People Rule the World
2. The Earth is completely hollow inside, with hidden civilizations, giant creatures, and entrances at the North and South Poles.
3. Australia Doesn't Exist
4. The Titanic Never Sank
@devwitheyob
#TechVibe #random
π3
Article of the day
A few years ago, I loved writing code that made me feel smart. Dense abstractions. Fancy design patterns. Generic types nested inside more generic types. APIs that looked elegant, at least until I came back six months later and couldnβt remember what I was thinking.
These days, my philosophy is much simpler...
Read full article π [ LINK ]
@devwitheyob
#TechVibe #ArticleOfTheDay #SWE
A few years ago, I loved writing code that made me feel smart. Dense abstractions. Fancy design patterns. Generic types nested inside more generic types. APIs that looked elegant, at least until I came back six months later and couldnβt remember what I was thinking.
These days, my philosophy is much simpler...
Read full article π [ LINK ]
@devwitheyob
#TechVibe #ArticleOfTheDay #SWE
Forwarded from SSC
βOur fellow student, Abel, urgently needs our help as he recovers from a severe injury. Let's come together as a school community to support him in his time of need.
Please contribute whatever you can using the bank account in the poster above and share this post across your groups and networks to help spread the word.
βEvery donation and share counts! π
Please contribute whatever you can using the bank account in the poster above and share this post across your groups and networks to help spread the word.
βEvery donation and share counts! π
β€3π1
Finished building and deploying an LMS for a client today. It's now live for testing, so hopefully they like it. One of my favorite parts was adding AI course and quiz generation. You can create an entire course from a prompt, generate quizzes from the content, save drafts, manage courses with a markdown editor, track learner progress through analytics, and issue certificates after completion. It was a fun project to build, it took me almost 6 days now
@devwitheyob
#TechVibe #project #LMS #upwork
@devwitheyob
#TechVibe #project #LMS #upwork
π₯6π2β€1
Article of the day
Rate limiting isn't just about picking an algorithm. There are three problems to solve, how you count requests, what identity you rate limit on(API key, userId), and distributed coordination. Get any one of these wrong and you'll either block legitimate users or leave the door open for attackers.
A common mistake is rate limiting by IP alone. It works until a large company sits behind a NAT where hundreds of employees share the same public IP. One busy user can cause everyone else to hit the limit even though they're behaving normally. For authenticated APIs, user IDs or API keys are usually much better keys than IP addresses.
For the algorithm itself, Token Bucket is a great choice when clients need to send short bursts of requests while staying within an average rate over time. Sliding Window Counter provides more consistent enforcement without storing every request, making it a good fit for high-traffic APIs.
In distributed systems, every server needs to enforce the same limits. That's why many production systems store rate limit state in Redis and use Lua scripts to make the check-and-update operation atomic. This prevents race conditions where multiple servers could allow more requests than intended.
Read the full article π [ LINK ]
@devwitheyob
#TechVibe #RateLimiting #SystemDesign #ArticleOfTheDay
Rate limiting isn't just about picking an algorithm. There are three problems to solve, how you count requests, what identity you rate limit on(API key, userId), and distributed coordination. Get any one of these wrong and you'll either block legitimate users or leave the door open for attackers.
A common mistake is rate limiting by IP alone. It works until a large company sits behind a NAT where hundreds of employees share the same public IP. One busy user can cause everyone else to hit the limit even though they're behaving normally. For authenticated APIs, user IDs or API keys are usually much better keys than IP addresses.
For the algorithm itself, Token Bucket is a great choice when clients need to send short bursts of requests while staying within an average rate over time. Sliding Window Counter provides more consistent enforcement without storing every request, making it a good fit for high-traffic APIs.
In distributed systems, every server needs to enforce the same limits. That's why many production systems store rate limit state in Redis and use Lua scripts to make the check-and-update operation atomic. This prevents race conditions where multiple servers could allow more requests than intended.
Read the full article π [ LINK ]
@devwitheyob
#TechVibe #RateLimiting #SystemDesign #ArticleOfTheDay
β€2
Take a look at this client-side code. When the API returns a rate limit response, the backend sends a
The reason is simple. If every client uses only exponential backoff, they'll often retry at nearly the same time, creating a thundering herd that can overwhelm the server again. Full jitter adds a random delay, spreading retries more evenly and smoothing out traffic spikes. Always use the
@devwitheyob
#TechVibe #RateLimiting #CodeSnippet #go
Retry-After header, and the client waits for that duration before trying again. One thing you might notice is the use of jitter. Why do we add randomization here?The reason is simple. If every client uses only exponential backoff, they'll often retry at nearly the same time, creating a thundering herd that can overwhelm the server again. Full jitter adds a random delay, spreading retries more evenly and smoothing out traffic spikes. Always use the
Retry-After header when it's provided; otherwise, calculate the delay yourself using exponential backoff with jitter.@devwitheyob
#TechVibe #RateLimiting #CodeSnippet #go
β€1π1
TechVibe
Photo
They liked it guys
Also was on interview and it was good they liked how I approach problems and deliver in short amou t of time
@devwitheyob
#TechVibe #project
Also was on interview and it was good they liked how I approach problems and deliver in short amou t of time
@devwitheyob
#TechVibe #project
π₯11β€1
"Thinking of talent as innate makes our world more manageable, more confortable. It relieves a person of the burner of expectation"
From Limitless book.
@devwitheyob
#TechVibe #books #random
From Limitless book.
@devwitheyob
#TechVibe #books #random
My linkedin engagement for the past 7 days
Let's connwct and help me grow my acc on linkedin guysπ, this is my 4th acc, they keep banning my accounts ππ
My LinkedIn: https://linkedin.com/in/eyob-simachew
@devwitheyob
#TechVibe #linkedin
Let's connwct and help me grow my acc on linkedin guysπ, this is my 4th acc, they keep banning my accounts ππ
My LinkedIn: https://linkedin.com/in/eyob-simachew
@devwitheyob
#TechVibe #linkedin
π5
Article of the day
Microservices don't mean you need ten different servers from day one. Most teams start by splitting a large backend into smaller services while still running everything on a single VPS with Docker Compose. Each service has its own Docker image and container, and services communicate over HTTP, gRPC, or a message broker like RabbitMQ or Kafka. This already gives you independent deployments, better code organization, and the ability to update one service without rebuilding the entire backend.
As traffic grows, you start moving services onto their own VPSs based on their resource needs. An AI service might need a machine with more CPU and memory, while an authentication service can stay on a much smaller server. Shared infrastructure such as PostgreSQL, Redis, and RabbitMQ is also commonly moved to dedicated machines so they aren't competing with application services for resources. This approach lets you scale only the parts of the system that need it instead of scaling everything together.
A good migration to microservices is usually gradual. Start by identifying clear business domains like authentication, users, payments, notifications, or courses, then extract them one at a time into separate services. Once a service is independent, it should eventually own its own database instead of sharing one with every other service. That prevents services from directly changing each other's data, reduces tight coupling, and allows each database to be optimized, scaled, and maintained independently. The goal isn't to split everything as quickly as possible, but to create boundaries that make the system easier to develop, deploy, and scale over time.
Read the full article π [ LINK ]
@devwitheyob
#TechVibe #Microservices #Docker #SystemDesign #ArticleOfTheDay
Microservices don't mean you need ten different servers from day one. Most teams start by splitting a large backend into smaller services while still running everything on a single VPS with Docker Compose. Each service has its own Docker image and container, and services communicate over HTTP, gRPC, or a message broker like RabbitMQ or Kafka. This already gives you independent deployments, better code organization, and the ability to update one service without rebuilding the entire backend.
As traffic grows, you start moving services onto their own VPSs based on their resource needs. An AI service might need a machine with more CPU and memory, while an authentication service can stay on a much smaller server. Shared infrastructure such as PostgreSQL, Redis, and RabbitMQ is also commonly moved to dedicated machines so they aren't competing with application services for resources. This approach lets you scale only the parts of the system that need it instead of scaling everything together.
A good migration to microservices is usually gradual. Start by identifying clear business domains like authentication, users, payments, notifications, or courses, then extract them one at a time into separate services. Once a service is independent, it should eventually own its own database instead of sharing one with every other service. That prevents services from directly changing each other's data, reduces tight coupling, and allows each database to be optimized, scaled, and maintained independently. The goal isn't to split everything as quickly as possible, but to create boundaries that make the system easier to develop, deploy, and scale over time.
Read the full article π [ LINK ]
@devwitheyob
#TechVibe #Microservices #Docker #SystemDesign #ArticleOfTheDay
π₯3β€1
When I finished high school, my father took me on a trip into the countryside, and we visited over 8 different places. I learned a lot about how people live, what excites them, our culture, and many memories.
We also saw different natural places. I promised to make this kind of long trip at least every 3 years, but currently, moving freely is not something you can do, especially in the current situation.
I really wish things settle down and I will make the same kind of trip right after I graduate.
@Ihaveadream19
#trip
We also saw different natural places. I promised to make this kind of long trip at least every 3 years, but currently, moving freely is not something you can do, especially in the current situation.
I really wish things settle down and I will make the same kind of trip right after I graduate.
@Ihaveadream19
#trip
β€11