My Favorite Tech Articles for 2018

I've been reading a lot of tech articles and blogs recently. In this post, I'll share some of those I found interesting over the past year.

The Crappy Game

Let me tell you about the crappiest thing we’ve ever built. It involves a deadline, procrastination, hacks & ugly code. It’s one of my favorite projects though.

Godge

Three weeks ago, I attended my first Golang meetup at Munich. I decided to start a Go meetup in Egypt and I built Godge specifically for that.

Fuzzy DNS

For some reason, I thought it might be a good idea to tolerate typos in subdomain names. I added this idea to my Google keep's idea pool, left it there and forgot about it. Few weeks later, fuzzy-dns was born. A simple fuzzy domain name server.

Handling User Defined Signals in Go

Signals represent a limited form of inter-process communication that is used to interrupt the execution of a certain program to execute a predefined handler. In this post, we are interested in the user-defined signals "USR1" and "USR2". Those signals are there for you to define their handlers. I'll be sharing some ideas for what you can do with these signals.

Smock

Smock is an open source golang package that is used to mock remote servers. It starts a mock server locally, runs a user defined function passing the mock server's URL to it and collects all the requests that were sent to the server.

The distributed R Console

As a data science startup, we write a lot of R scripts. Since we often work with very large amounts of data, our R scripts usually have high CPU and Memory usage. Moreover, these R scripts may take hours or even days to finish. It doesn’t, therefore, make sense to run them on our workstations. That’s why we built a kind of distributed R console to schedule and run R scripts on a one-click deployable on-demand cluster.

Beginner Thoughts on Go

A few months ago, I couldn't answer the "What's your main programming language?" question. I used many programming languages during my university studies, internships and side projects but I didn't dig deep into any of them. I decided I wanted to learn something new and dig deeper into it. That's when I first found out about Google's golang. I started learning go and worked on some side projects with it, and I actually like it. A few weeks ago, I started building a big sized backend service for @zoobeapp using go and it's in production now. In this blog post I'll write about some of my thoughts on Go after I've been using it for a few months now.

Parallelize it with Docker

At Trustious, our test suite used to run on a single machine for about 12 hours. We then tried parallelizing the run on three machines. The run took on average about 4 hours. The results were still not satisfying to us so we started building our in office test cluster and a test parallelization framework using docker.

Codeforces Account Takeover

I was playing around with Codeforces and inspecting the networking of the website when I decided to check if Codeforces is vulnerable to CSRF attacks or not. I found that all requests contain CSRF tokens but I decided to test it anyway. I copied the request to my terminal and removed the CSRF token and it worked! I tried with different requests and apparently the CSRF tokens - although they existed - were never validated. Codeforces was vulnerable to CSRF attacks.

My Journey with Trustious

Networks? Yeah I think it's cool. Distributed Systems? I want to try building a distributed app. Machine Learning? Sure! I'll take the machine learning course on coursera because for sure building a recommendation system is fun. Kernel Hacking? Yes it's kernel hacking, I want to be a kernel hacker! Whenever I find something new, I get excited and start reading about it for a while and then nothing. That's when I got an internship offer from Trustious.