<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>prometheus on somtochiama</title><link>https://somtochiama.github.io/categories/prometheus/</link><description>Recent content in prometheus on somtochiama</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>somtochionyekwere@gmail.com (Somtochi Onyekwere)</managingEditor><webMaster>somtochionyekwere@gmail.com (Somtochi Onyekwere)</webMaster><copyright>© 2020</copyright><lastBuildDate>Mon, 06 Apr 2026 15:04:15 +0100</lastBuildDate><atom:link href="https://somtochiama.github.io/categories/prometheus/index.xml" rel="self" type="application/rss+xml"/><item><title>Understanding Native Histograms in Prometheus</title><link>https://somtochiama.github.io/posts/native-histograms-prometheus/</link><pubDate>Mon, 06 Apr 2026 15:04:15 +0100</pubDate><author>somtochionyekwere@gmail.com (Somtochi Onyekwere)</author><guid>https://somtochiama.github.io/posts/native-histograms-prometheus/</guid><description>&lt;p>Histogram is a metric type in Prometheus used to track the number (and sums) of observations such as latency and response times. It allows you to answer questions like &lt;code>how many requests were completed under 100ms&lt;/code>. In version 2.24.0, Prometheus added support for a new type of histograms called native histogram. This new histogram is similar to the original classic histograms but differ in how bucket boundaries are determined, and how the histogram data structure is represented internally.&lt;/p>&lt;p>Unlike classic histograms, which rely on statically configured bucket boundaries, native histograms do not require predefined boundaries. Instead, they use a schema that determines how bucket boundaries are calculated. This approach allows for a potentially infinite number of buckets while remaining memory-efficient because native histograms are sparse, buckets with zero observations consume almost no space. This blog takes a peek at native histograms.&lt;/p>&lt;h2 id="bucket-boundaries">Bucket boundaries&lt;/h2>&lt;p>Histograms works by keeping a count of each observation that is less than or equal to the upper bound of a bucket. Classic histogram are configured by specifying the upper boundary of each bucket. Picking the bucket is left to the user, they pick values that they care about (if you care that requests take less than &lt;code>10s&lt;/code>, you&amp;rsquo;ll probably have something setup like &lt;code>[0.1, 0.2, 0.5, 1, 2, 5, 10]&lt;/code>). All requests taking more than 10s falls into the last bucket whether it takes 10secs or 2 minutes. This works fine for most applications, at ten seconds you are already screaming regardless of how far out the actual numbers are, but if you care about the numbers that don&amp;rsquo;t fall into the defined buckets, this might be insufficient.&lt;/p>&lt;p>Native histograms have dynamic resolution and hence can produce more accurate calculations, while still being memory efficient because they are sparse - a bucket with zero observation takes up no space. The bucket boundaries of a native histogram is determined by what prometheus calls a schema. The scehma controls by how quickly bucket widths grow from one bucket to the next. You define a number between &lt;code>-4&lt;/code> and &lt;code>8&lt;/code>, and the bucket width of each successive bucket grows exponentially by &lt;code>(2 ^ (2 ^ (-schema))&lt;/code>. So if you have a bucket with a schema of 0, the bucket with increases exponentially by &lt;code>2 (2 ^( 2 ^ -0))&lt;/code> = &lt;code>2&lt;/code>. This means that the upper boundary of each bucket is twice that of the previous bucket.&lt;/p>&lt;p>&lt;img src="https://hackmd.io/_uploads/SJOYEWGF-x.png" alt="class_vs_native">&lt;/p>&lt;p>The higher the schema number the higher the resolution, since the growthnfactor of the bucket width decreases.&lt;/p>&lt;h2 id="sparseness">Sparseness&lt;/h2>&lt;p>Although you theorectically have an infinite amount of buckets, native histograms are sparse. We only keep data for buckets that have seen observations in. Prometheus achieves this by keeping additional information about the layouts of the buckets to easily identify filled buckets. The bucket with the upper boundary of 1 is taken as the zeroth buckets, and negative buckets (that&amp;rsquo;d record negative observations) are to the left of the zeroth bucket and have negative indexes, while positive bucket are to the left and have +ve indexes. The histogram records spans - continous segments of filled buckets. It has both length (to identify how many buckets are in a span) and offset - its distance from the last span.&lt;/p>&lt;pre tabindex="0">&lt;code>Histogram { spans = []Span buckets = []f64}Span { length u64 offset u64}&lt;/code>&lt;/pre>&lt;p>For example a native histogram, which has no observations in its zeroth bucket, but has observed counts in its first to third bucket, and then more counts in its sixth and seventh buckets can be represented as shown.&lt;/p>&lt;pre tabindex="0">&lt;code>Histogram { Spans = []{ Span{offset: 1, length: 3} Span{offset: 2, length: 2} } buckets: [3, 6, 5, 1, 2] }&lt;/code>&lt;/pre>&lt;p>&lt;img src="https://hackmd.io/_uploads/SkHnNbfY-g.png" alt="spans">&lt;/p>&lt;p>The first offset of 2 tells us that there are two empty buckets after the first one, then four filled buckets after that, and so forth. The counts of the filled buckets are contained in the buckets field.&lt;/p>&lt;h2 id="mergability">Mergability&lt;/h2>&lt;p>Additionally, Prometheus provides an option to limit the number of buckets and when the number of buckets exceeds this number, it would automatically merge buckets of the histogram into one with a smaller schema.&lt;/p>&lt;p>Histograms with different schemas can be merged to produce a histogram with a lower schema. Because the bucket widths would differ by a power of 2 between successive schemas we can merge neighbouring buckets to get a new histogram a smaller schema. Take the example histograms below, we can merge the first two buckets for the first histogram ([1-&amp;gt;2] with count 3 and [2-&amp;gt;4] with count 6) to get one bucket 1-&amp;gt;4 with count of 9, then the two histograms are easily mergable.&lt;/p>&lt;p>&lt;img src="https://hackmd.io/_uploads/SJVlBWfYbl.png" alt="merging_buckets">&lt;/p>&lt;h2 id="quantile-estimatation">Quantile estimatation&lt;/h2>&lt;p>Quantiles in histogram is commonly used to describe latency or response time behaviours in application e.g to answer questions, like what is the latency of 99th percent of my requests, which is important in many applications. For classic histogram, linear interpolation is used to the estimate the nth percentile. It is assumed that the distribution within the buckets are uniform.&lt;/p>&lt;p>For native histograms, it is assumed that observations within a bucket follow a uniform distribution when the bucket is subdivided exponentially. In other words, if a bucket is split into smaller sub-buckets with exponentially spaced boundaries, the samples are assumed to be evenly distributed across those sub-buckets.&lt;/p>&lt;p>&lt;img src="https://hackmd.io/_uploads/Hy2Nr-MY-e.png" alt="exp">&lt;/p>&lt;p>Echoing code comment in &lt;a href="https://github.com/prometheus/prometheus/blob/4321a5573c4400caa7a767aac66fb7a95cf7c0f6/promql/quantile.go#L340">prometheus code&lt;/a>:&lt;/p>&lt;blockquote>&lt;p>For exponential buckets, we interpolate on a logarithmic scale. On a logarithmic scale,the exponential bucket boundaries (for any schema) become linear (every bucket has the same width).&lt;/p>&lt;/blockquote>&lt;p>Exponential interpolation is done by first applying linear interpolation for the exponents of the bucket boundaries, then the final value is obtained by raising 2 to the power of the result.&lt;/p>&lt;p>&lt;img src="https://hackmd.io/_uploads/HJGeDbMtbg.png" alt="exp">&lt;/p>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// code has been simplified for clarity here&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// the actual code has special hang custom buckets, NaN values and zero buckets&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#a6e22e">it&lt;/span>.&lt;span style="color:#a6e22e">Next&lt;/span>() { &lt;span style="color:#75715e">// returns the next bucket with its count, lower and upper bound (in increasing order).&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">bucket&lt;/span> = &lt;span style="color:#a6e22e">it&lt;/span>.&lt;span style="color:#a6e22e">At&lt;/span>()&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">bucket&lt;/span>.&lt;span style="color:#a6e22e">Count&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span> {&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">continue&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">count&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#a6e22e">bucket&lt;/span>.&lt;span style="color:#a6e22e">Count&lt;/span> &lt;span style="color:#75715e">// we accumulate the total here&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">count&lt;/span> &lt;span style="color:#f92672">&amp;gt;=&lt;/span> &lt;span style="color:#a6e22e">rank&lt;/span> { &lt;span style="color:#75715e">// then check if the rank falls within this bucket&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">break&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">logLower&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">math&lt;/span>.&lt;span style="color:#a6e22e">Log2&lt;/span>(&lt;span style="color:#a6e22e">math&lt;/span>.&lt;span style="color:#a6e22e">Abs&lt;/span>(&lt;span style="color:#a6e22e">bucket&lt;/span>.&lt;span style="color:#a6e22e">Lower&lt;/span>)) &lt;span style="color:#75715e">// exponent of lower boundary&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">logUpper&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">math&lt;/span>.&lt;span style="color:#a6e22e">Log2&lt;/span>(&lt;span style="color:#a6e22e">math&lt;/span>.&lt;span style="color:#a6e22e">Abs&lt;/span>(&lt;span style="color:#a6e22e">bucket&lt;/span>.&lt;span style="color:#a6e22e">Upper&lt;/span>)) &lt;span style="color:#75715e">// exponent of upper boundary&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">rank&lt;/span> = &lt;span style="color:#a6e22e">count&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#a6e22e">rank&lt;/span> &lt;span style="color:#75715e">// how many observations falls within the last bucket&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">fraction&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">rank&lt;/span> &lt;span style="color:#f92672">/&lt;/span> &lt;span style="color:#a6e22e">bucket&lt;/span>.&lt;span style="color:#a6e22e">Count&lt;/span> &lt;span style="color:#75715e">// what fraction of the bucket is that&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">power&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">logLower&lt;/span> &lt;span style="color:#f92672">+&lt;/span> (&lt;span style="color:#a6e22e">logUpper&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#a6e22e">logLower&lt;/span>)&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">fraction&lt;/span> &lt;span style="color:#75715e">// linear interpolation on the exponennts&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">math&lt;/span>.&lt;span style="color:#a6e22e">Exp2&lt;/span>(&lt;span style="color:#a6e22e">power&lt;/span>), &lt;span style="color:#a6e22e">annos&lt;/span> &lt;span style="color:#75715e">// we take a power of two here to get the actual value.&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can look the code here &lt;a href="https://github.com/prometheus/prometheus/blob/main/promql/quantile.go#L350">promql/quantile&lt;/a>.&lt;/p>&lt;p>I think native histograms can be useful in a lot of cases, it allows use of labels on histograms without blowing up cardinality and finer grained resolution for more accurate measurements. Native histograms can be enabled using the &lt;code>scrape_native_histograms&lt;/code> config setting but note that this changes the exposition format to protobuf since text is not yet supported.&lt;/p>&lt;p>References:&lt;/p>&lt;ul>&lt;li>&lt;a href="https://docs.google.com/document/d/1VhtB_cGnuO2q_zqEMgtoaLDvJ_kFSXRXoE0Wo74JlSY/edit?tab=t.0">https://docs.google.com/document/d/1VhtB_cGnuO2q_zqEMgtoaLDvJ_kFSXRXoE0Wo74JlSY/edit?tab=t.0&lt;/a>&lt;/li>&lt;li>&lt;a href="https://prometheus.io/docs/specs/native_histograms">https://prometheus.io/docs/specs/native_histograms&lt;/a>&lt;/li>&lt;/ul></description></item><item><title>Getting accepted into GSoC</title><link>https://somtochiama.github.io/posts/getting-into-gsoc/</link><pubDate>Tue, 01 Jul 2025 00:58:56 +0100</pubDate><author>somtochionyekwere@gmail.com (Somtochi Onyekwere)</author><guid>https://somtochiama.github.io/posts/getting-into-gsoc/</guid><description>&lt;p>This blog post is about five years too late. I got into Google Summer of Code in 2020 and have been meaning to write one, but I kept putting it off. Since I still get occasional messages from people trying to get in, and the application period is closed, I decided to finally sit down and get it done. Getting into the program quite literally changed my life. I learnt a whole lot and connected with lifelong mentors (hi &lt;a href="https://www.linkedin.com/in/leighcs">Leighhhh&lt;/a> 💓!). This post is mostly around getting into Google Summer of Code, but the tips are general enough that they apply to other open-source internships, and there are many others like &lt;a href="https://www.outreachy.org/">Outreachy&lt;/a>, &lt;a href="https://fellowship.mlh.io/">MLH&lt;/a>, &lt;a href="https://lfx.linuxfoundation.org/tools/mentorship/">LFX Mentorship&lt;/a> etc.&lt;/p>&lt;h2 id="maybe-an-intro-on-why-you-should-care">Maybe an intro on why you should care?&lt;/h2>&lt;p>If you are just getting started in tech, have a solid knowledge of one or two programming languages, have built some personal projects, and you are looking for a way to level up your skills and get paid while at it, open-source internships are where it is. You get a chance to contribute to an active project, get feedback and reviews from experienced people and join a great community while getting paid (in $$). There are seasoned engineers from big tech companies and fast-paced startups in these communities, and you also get a chance to connect with them. Each project idea has specific mentors, and you get guidance throughout the internship period.&lt;/p>&lt;p>When I first applied to GSoC in 2019 (yes, I applied twice, it is okay if you don’t get in the first time), I only started to look at organizations during the application period, and just managed to scrape together a proposal. But when the next application season came around, I was ready.&lt;/p>&lt;h2 id="start-early">Start early&lt;/h2>&lt;p>The most important thing you can do to increase your chances is to start early, like wayy before the application period begins. Get involved and start contributing as soon as you can.Of course, organizations would pick someone who has already been contributing for a while. The person would also have a better proposal because they have more knowledge about the project. You can stop reading right now. That’s it. What follows are just tips to help with decisions, picking a project, etc. But at the core of it is to pick a project that aligns with what you are interested in (language that you know, and doing something you are interested in) and making meaningful contributions early. (Please, please don’t be one of those people who make random, empty contributions that add to maintainer burden; this wouldn’t help AT ALL.)&lt;/p>&lt;p>&lt;img src="gsoc-email.png" alt="acceptance email gsoc">&lt;/p>&lt;h2 id="pick-an-organisation">Pick an organisation&lt;/h2>&lt;p>It helps if you are genuinely interested in the project, and it aligns with your experience. It is much easier to be a consistent contributor if the project intrigues you. The Google summer of codede archive page](&lt;a href="https://summerofcode.withgoogle.com/archive">https://summerofcode.withgoogle.com/archive&lt;/a>) has tabs to check organizations in particular areas like Machine Learning.&lt;/p>&lt;p>Take a look at what they do, read through their docs. Some repositories have a &lt;a href="http://CONTRIBUTING.md">&lt;code>CONTRIBUTING.md&lt;/code>&lt;/a> file that contains information for new contributors. You can join a couple of communities before settling on one, introduce yourself as a new contributor, try to understand what the project is about and ask what are good first steps to take, Most communities are very welcoming, but I tried to look out for more active communities since you’d get responses faster.&lt;/p>&lt;p>You can select two organisations, but I selected just one (Cloud Native Computing Foundation). I found it easier to focus all my efforts on one; most of them are big enough that they have multiple project ideas during GSoC, so you can still submit two or three proposals.&lt;/p>&lt;h2 id="contribute">Contribute!&lt;/h2>&lt;p>This is where the work lies. It&amp;rsquo;s not enough to just join these communities. You have to actually contribute. It is okay if it feels overwhelming at first. The project is probably years of work and has evolved - you can’t understand it all within a week. Most organizations have a bunch of repositories, but there’s normally one or two core ones. I’d advise starting with those or whichever piques your interest.&lt;/p>&lt;p>Start small. Some repositories have labelled issues that indicate the level of difficulty. It doesn’t have to be code; you can start with documentation. Go through the docs and demos - you might find something that’s broken or doesn’t work as stated. Add new tests or fix an easy issue that no one has gotten around to. You can also simply ask - ‘ Hi, I am a new contributor and I’m excited to get started, are there any good issues that’d be great to pick?’.&lt;/p>&lt;p>Join the community meetings and try to be a part of the discussion. Ask questions when you are confused. Be open to reviews on your pull request, each code base has its own styles and entrenchment. Don’t get stressed because there are a lot of review comments - just carefully go through them and make the necessary changes.&lt;/p>&lt;p>But don’t get stuck in the small things; the goal over time is for you to progress to handling bigger issues. With time and effort, you’ll become a regular contributor. Check out other people’s pull requests and issues too, don’t be afraid to make suggestions or open new issues that you might have discovered.&lt;/p>&lt;h2 id="put-in-maximum-effort-during-the-proposal-period">Put in maximum effort during the proposal period:&lt;/h2>&lt;p>It is possible that the part of the project that you’ve been working on is different from the ones the organization will submit as its project ideas. When you discover this, shift your effort to that area. Start contributing there, join the meetings if it is different from the ones you have been attending. Understand what the project idea is about and what they’re trying to achieve.&lt;/p>&lt;p>Aim to write a very solid proposal. Bring fresh ideas to the table, and clearly break down your plan into achievable milestones over the three-month period. Take a look at past accepted proposals to get some inspiration. My friend created a repository containing proposals from different organizations &lt;a href="https://github.com/prondubuisi/accepted-gsoc-proposals">here&lt;/a>.&lt;/p>&lt;p>That’s it! I hope this helps. Best of luck 💫&lt;/p>&lt;p>If you are curious about what I worked on during the GSoC period. Here’s a link to a blog post around it. &lt;a href="https://kubernetes.io/blog/2020/09/16/gsoc20-building-operators-for-cluster-addons/">https://kubernetes.io/blog/2020/09/16/gsoc20-building-operators-for-cluster-addons/&lt;/a>&lt;/p></description></item><item><title>Learning to Touch type</title><link>https://somtochiama.github.io/posts/learning-to-touch-type/</link><pubDate>Sat, 10 Feb 2024 22:51:24 +0100</pubDate><author>somtochionyekwere@gmail.com (Somtochi Onyekwere)</author><guid>https://somtochiama.github.io/posts/learning-to-touch-type/</guid><description>&lt;blockquote>&lt;p>we are typist first, programmers second - &lt;a href="https://blog.codinghorror.com/we-are-typists-first-programmers-second/">Jeff Atwood&lt;/a>&lt;/p>&lt;/blockquote>&lt;p>Quick log about how I got to touch typing at 50 wpm from hunt-and-peek in roughly 6 months.&lt;/p>&lt;ul>&lt;li>Focus on accuracy and speed will come.&lt;/li>&lt;li>Start with &lt;a href="http://keybr.com">keybr.com&lt;/a> until all the letters turn green&lt;ul>&lt;li>Aim for about 15 - 30mins everyday, also a fun way to fill in your pomodoro breaks&lt;/li>&lt;li>You don’t need to touch type during your daily work, that might make you frustrated. Just 30 minutes is enough,&lt;/li>&lt;li>You are just trying to internalize the positions of the keys and get used to it&lt;/li>&lt;li>One great thing about keybr is that it keeps you on one key until you are able to hit it at a certain speed andaccuracy. That’s why I think one of the best for starting out, even if you already know the position of the keys&lt;/li>&lt;li>keybr doesn’t show the finger placement on the keyboard, you might have to take a look an image to figure out whichfinger goes with which key.&lt;/li>&lt;li>Unfortunately, keybr doesn’t include letters, symbols or modifier keys. You might have to supplement withanother tool (typing.com?). I can no longer remember which tool I used. Any tool should be fine. You just need toknow the positions of each key.&lt;/li>&lt;/ul>&lt;/li>&lt;li>When all your letters are green on keybr, Move to &lt;a href="http://monkeytype.com">monkeytype.com&lt;/a>&lt;ul>&lt;li>My setting for this is 1k (1k most common words in English), numbers, punctuations and 60(secs,length of each typing test, planning to increase it 120secs)&lt;/li>&lt;li>Aim for &amp;gt;97% accuracy. Worth mentioning again - accuracy over speed&lt;/li>&lt;li>At the end of each test, you can retry the words that you missed and keep doing this until you hit a 100% accuracy.&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>&lt;p>Since I got to a reasonable speed and I could touch type for pretty much my daily work.I stopped the daily practice and plateaued at 50 wpm sometime last year. I hope to get back at this year and get to70wpm. If you have any other good tips for going from 50 wpm to 70 wpm. leave a comment!&lt;/p></description></item><item><title>Bloggers on Blogging</title><link>https://somtochiama.github.io/posts/favourite-bloggers-on-blogger/</link><pubDate>Mon, 12 Jun 2023 12:31:27 +0100</pubDate><author>somtochionyekwere@gmail.com (Somtochi Onyekwere)</author><guid>https://somtochiama.github.io/posts/favourite-bloggers-on-blogger/</guid><description>&lt;p>I have spent a sometime convincing myself to start a blog and in doing that I have stumbled upon good advice onblogging. So I decided to publish a post each week to get my engines started. I am starting off by compiling a list oflinks from people I follow/read their blogs on why you should blog.&lt;/p>&lt;h2 id="jeff-atwood-how-to-achieve-ultimate-blog-success-in-one-easy-stephttpsblogcodinghorrorcomhow-to-achieve-ultimate-blog-success-in-one-easy-step">Jeff Atwood: &lt;a href="https://blog.codinghorror.com/how-to-achieve-ultimate-blog-success-in-one-easy-step/">“How To Achieve Ultimate Blog Success In One Easy Step”&lt;/a>&lt;/h2>&lt;p>Jeff writes at &lt;a href="https://blog.codinghorror.com/">https://blog.codinghorror.com&lt;/a> which is one of my favourite blogs.&lt;/p>&lt;blockquote>&lt;p>When people ask me for advice on blogging, I always respond with yet another form of the same advice&lt;strong>pick a schedule you can live with, and &lt;em>stick to it&lt;/em>. Until you do that, none of the other advice I could giveyou will matter.&lt;/strong> I don&amp;rsquo;t care if you &lt;a href="https://blog.codinghorror.com/fear-of-writing/">suck at writing&lt;/a>.I don&amp;rsquo;t care if &lt;a href="https://blog.codinghorror.com/users-dont-care-about-you/">nobody reads your blog&lt;/a>. I don&amp;rsquo;t careif you have &lt;a href="https://blog.codinghorror.com/blogging-about-blogging/">nothing interesting to say&lt;/a>. If you candemonstrate a willingness to write, and a desire to keep continually improving your writing, you will eventually be successful.&lt;/p>&lt;/blockquote>&lt;h2 id="ben-kuhn-writinghttpswwwbenkuhnnetwriting">Ben Kuhn: &lt;a href="https://www.benkuhn.net/writing">Writing&lt;/a>&lt;/h2>&lt;p>Ben Kuhn goes more in-depth on how and why you should blog.&lt;/p>&lt;blockquote>&lt;p>It’s easy to think that you have to put out really “interesting” writing in order for other people to like it.&lt;a href="https://www.benkuhn.net/writing/#fn:3">3&lt;/a>I think that’s true for going viral, but not true for having a blog that your friends enjoy reading,makes acquaintances feel more positively towards you, etc.….As mentioned above, an important first step here is to lower your bar for what’s worth writing about.&lt;/p>&lt;/blockquote>&lt;h2 id="alex-guezy-why-you-should-start-a-blog-right-nowhttpsguzeycompersonalwhy-have-a-blog">Alex Guezy: &lt;a href="https://guzey.com/personal/why-have-a-blog/">Why You Should Start A Blog Right Now&lt;/a>&lt;/h2>&lt;blockquote>&lt;p>This fact is very frequently lost when discussing writing: &lt;strong>writing not only helps you to understandwhat’s going on and to crystallize your thoughts, it actually makes you think of new ideas and comeup with solutions to your problems.&lt;/strong>&lt;/p>&lt;/blockquote>&lt;h2 id="steve-yegge-you-should-write-blogshttpssitesgooglecomsitesteveyegge2you-should-write-blogs">Steve Yegge: &lt;a href="https://sites.google.com/site/steveyegge2/you-should-write-blogs">You should write blogs&lt;/a>&lt;/h2>&lt;blockquote>&lt;p>I&amp;rsquo;ve talked with a lot of people who are reluctant to write blogs. Everyone offers pretty much the same reasons:they&amp;rsquo;re too busy, or they&amp;rsquo;re afraid to put something on &amp;ldquo;permanent public record&amp;rdquo;, or they think nobody willread their blog, or they think blogging is narcissistic. Or they&amp;rsquo;re worried that they either don&amp;rsquo;t have anythinggood to say, or they won&amp;rsquo;t say it very well.&lt;/p>&lt;p>I&amp;rsquo;m here to tell you that &lt;em>none&lt;/em> of these reasons should stop you from writing in your blog.&lt;/p>&lt;/blockquote>&lt;h2 id="julia-evans-write-aboout-what-youve-struggled-withhttpsjvnscablog20210524blog-about-what-you-ve-struggled-with">Julia Evans: &lt;a href="https://jvns.ca/blog/2021/05/24/blog-about-what-you-ve-struggled-with/">Write aboout what you&amp;rsquo;ve struggled with&lt;/a>&lt;/h2>&lt;p>This is more about getting a sense of what to blog about, especially for programmers.Notice the crease, parts that don’t make sense, delve deeper into them and write about them.&lt;/p>&lt;blockquote>&lt;p>The process I use for a lot of my blog posts is:&lt;/p>&lt;ol>&lt;li>Struggle with something (usually computer-related)&lt;/li>&lt;li>Eventually (days or months or years later), figure out how to solve some of the problems I had&lt;/li>&lt;li>Write a blog post about what helped me&lt;/li>&lt;/ol>&lt;/blockquote>&lt;h2 id="david-perrell-why-you-should-writehttpsperellcomessaywhy-you-should-write">David Perrell: &lt;a href="https://perell.com/essay/why-you-should-write">Why you should write&lt;/a>:&lt;/h2>&lt;p>Perrell’s not really into tech but has some good writing tips. He also runs an online writing school &lt;a href="https://writeofpassage.school/">Write of Passage&lt;/a>:&lt;/p>&lt;blockquote>&lt;p>Words are the atomic unit of the internet.With the stroke of a pen, you can build your network, improve your thinking, and create opportunities for yourself.&lt;/p>&lt;/blockquote>&lt;h2 id="seth-godin-write-somethinghttpssethsblog202109write-something">Seth Godin: &lt;a href="https://seths.blog/2021/09/write-something/">Write something&lt;/a>&lt;/h2>&lt;p>Seth keeping it short and sweet, as always.&lt;/p>&lt;blockquote>&lt;p>There’s no such thing as writer’s block. There’s simply a fear of bad writing.Do enough bad writing and some good writing is bound to show up.&lt;/p>&lt;/blockquote>&lt;p>I am mostly writing this for myself, in case I occasionally need a reminder.The core of the advice on these links is just to get started! More specifically, start writing(and publishing)at a particular cadence online.&lt;/p>&lt;p>You know a lot of cool stuff, you should share them :).&lt;/p></description></item><item><title>Welcome to my blog!</title><link>https://somtochiama.github.io/posts/welcome-post/</link><pubDate>Sat, 15 Aug 2020 12:31:27 +0100</pubDate><author>somtochionyekwere@gmail.com (Somtochi Onyekwere)</author><guid>https://somtochiama.github.io/posts/welcome-post/</guid><description>&lt;h2 id="my-lord-if-i-may">My Lord, If I may?&lt;/h2>&lt;p>Welcome, wanderers, to my corner of the internet. However you may have stumbled into this rough path, it matters not. This is my space and you are definitely welcome. This place houses my writings - technical or non-technical, rants, and what not.&lt;/p>&lt;p>My name is Somto. You may have heard of me.&lt;/p></description></item></channel></rss>