Having a blog

The first rule of writing is “Know your reader.” I don’t know my reader. In fact, there is no reader yet. So this makes things a bit more difficult, but I’ll try my best.

To get a grasp of the audience, maybe some code can help us analyse the situation. To be realistic, I will assume that there are one million people currently reading this.1 They are randomly distributed on the so-called “Nerd Scale”:

N = 1000000                             # That's just the beginning!
initial_readers = np.random.randn(N)    # Draw N random people from the global population (normally distributed along nerd scale)

If we plot a histogram of the current readers regarding their nerd factors, this is what we get:

To clarify how this scale works, one may refer to the table below:

Nerd Factor Example2
-5 A Sperm Whale
-4 A Bowl of Petunias
-3 Prostetnic Vogon Jeltz
-2 Arthur Dent
-1 Zaphod Beeblebrox
0 Ford Prefect (the car)
1 Marvin
2 Slartibartfast
3 Trillian
4 Lunkwill and Fook
5 Deep Thought

All right, because there has now been Python code and H2G2 references, I think it’s probably fair to assume most of our million initial readers have left, because they have better things to do. Good thing that I have nothing better to do than to calculate who left!

To find this out, it’s best to carry out a study where we take a large number of individuals from everywhere on the nerd scale and ask them whether they would continue reading after the first paragraphs. The collected data can then give us a function to predict who of our initial readers left.

This study is easily simulated on a computer:

from scipy.stats import norm
x = np.linspace(-6, 6, 500)         # 500 carefully chosen individuals that are evenly distributed along the nerd scale
probability = norm.pdf(x, loc=3)    # Asking them whether they would read on
probability /= probability.max()    # Normalizing

As expected, it seems like more nerdy people stick around with a higher probability. Interestingly, the biggest nerds left, they probably really do have better things to do.

Now we can apply this function to the people from before and see who’s still with us!

p_still_reading = norm.pdf(initial_readers, loc=3)       # Now ask the 'real' readers if they want to continue reading
p_still_reading /= p_still_reading.max()                 # Normalize
nerds = np.where(np.random.rand(N) < p_still_reading, 
                 initial_readers, np.full(N, np.nan))    # Filter out those that don't want to continue

So even though the maximal probability of reading on was at 3, the mean nerd factor of the remaining readers is below 2, because there were so few 3’s to begin with!

Okay so how many readers are left overall?

print(f"Audience reduced to {(1 - np.sum(np.isnan(nerds)) / N) * 100 :.2f}% of what was zero to begin with.")
Audience reduced to 7.43% of what was zero to begin with.

Ok then, I think that’s enough of that. Thank you for not yet fleeing my site, I hope you had a great day so far. Now that I feel comfortable around my audience, I think it’s time to introduce myself.

I’m Onno (in case you haven’t spotted the tiny subtle letters in the sidebar). By day I study electrical engineering, and by night I usually sleep. Whenever I have too much time or enthusiasm on my hands, I start a project–like this blog! Some of my biggest projects so far were ePotato, tau and 6Ω of Separation. These are all projects I worked on for at least a few months, and for each of them I built a separate website. But for most of my smaller projects I don’t have the time to do that, so in the past I just put a link to the GitHub repository on my (now defunct) archive page.

A lot of the time, I don’t think this is doing these smaller projects justice. Last year I worked about 50 hours on a small project called “Snowflake”; a few LEDs controlled by an ATtiny13A3, using pulse width modulation to blink. It was a lot of fun, but much more challenging than I expected! For example, I had to use Assembly to program these things because all my C programs compiled to files too large for the AVR’s memory. I did upload my code to GitHub4, but what use is that? If somebody were to have the same problems I had building it, I want them to be able to find my solutions. That won’t happen if all there is is a code file hidden somewhere on GitHub.

I have replaced the old archive page with a new projects page, where I at least provide a description for each project. But in the future, I want to share my projects more in-depth, that’s why I’m starting this blog. I’ve tried Medium before, for the “6Ω of Separation project”5, but I think this Jekyll-powered blog is much more fun. There’s a lot more room for possibilities, for example to embed interactive widgets in posts. Also, Jupyter Notebooks:

So we’ll see where this goes, I hope for the best.

Thank you very much for reading my first blog post! I hope to post about once a month, so as to improve my writing skills, and also to force me to engage in projects, so that I have something to write about. You can subscribe via RSS / Atom using the button in the sidebar, but I will probably also crosspost future posts to Medium.

By the way, maybe none of us are nerds, according to the “Nerd Manual”6 there are six steps to becoming a real nerd:

So just try to keep that in mind. But don’t be too rude to Phil please.
Who is Phil? Are you Phil?

Download the Jupyter Notebook file for this post


  1. Proof (live analytics):  

  2. It’s been a while since I’ve read the book. If you have an objection, feel free to argue. 

  3. These are amazing, basically a whole computer the size of a fingernail! Datasheet (microchip.com) 

  4. Link (github.com) 

  5. Link (medium.com) 

  6. Link (nerdmanual.com)