<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Adrian B.G.</title>
    <description>The latest articles on Forem by Adrian B.G. (@bgadrian).</description>
    <link>https://forem.com/bgadrian</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F32000%2Fa32696b2-dd6a-4c9e-a786-681a9ae6447d.jpg</url>
      <title>Forem: Adrian B.G.</title>
      <link>https://forem.com/bgadrian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bgadrian"/>
    <language>en</language>
    <item>
      <title>A/B tests for developers</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Fri, 04 Jan 2019 13:16:07 +0000</pubDate>
      <link>https://forem.com/bgadrian/ab-tests-for-developers-47ob</link>
      <guid>https://forem.com/bgadrian/ab-tests-for-developers-47ob</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is only the first part of the main story from my blog: &lt;a href="https://coder.today/tech/2017-09-22_ab-tests-developers-manual/" rel="noopener noreferrer"&gt;A/B tests developers manual&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Best case scenario: Your [product owner,boss,producer] found out about A/B tests and you are here to learn more about how to implement them.&lt;/p&gt;

&lt;p&gt;Worst case scenario: Your product is already a mess because of A/B tests, and you want to clean it up.&lt;/p&gt;

&lt;p&gt;Either way, I’m writing this article so you do not have to repeat our mistakes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the last 5 years I worked mostly in the gaming industry. I had to implement hundreds of A/B tests and I learned it’s a powerful 💪🏾 tool. In the same time I learned that if you do not pay enough attention, your code transforms in a spaghetti 🍝restaurant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wish there would be a single simple 🎯way to implement A/B tests without making a mess in your code,but I don’t know any. By definition your code needs to have multiple versions of the same behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intro ⚓
&lt;/h3&gt;

&lt;p&gt;Skip this block if you are already familiar with A/B testing.&lt;/p&gt;

&lt;p&gt;A/B test is also called multivariate testing, A/B/C/D testing, split testing or bucket testing. It is an iterative process of experimentation, that helps you find out what is better for your product. More formal definitions: here and here.&lt;/p&gt;

&lt;p&gt;Your product (game, app, website, shop …) can grow in 2 ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a person says “feature X will improve the Y KPI by 30%”, and you implement this feature. We, the mortal humans cannot predict the future, we can only guess it.&lt;/li&gt;
&lt;li&gt;a person says “this X feature is the best”, other says “Y feature is the best”. You implement X,Y,Z variants and measure exactly which one is better.It may be none, one or more of them. You keep the best versions and improve them with further split tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tests are done on smaller, but representative samples of users. This way you can test multiple versions in parallel and mitigate the effects. You do not know how it will affect the user behavior, so you want to minimize a possible damage.&lt;/p&gt;

&lt;p&gt;You start by distributing your users into buckets, each bucket will provide a different user experience and you collect the data and analyze the impact of each version. You choose the best bucket and roll-out it to all the users. The process is more complex than this, but this was the main idea.&lt;/p&gt;

&lt;p&gt;Basic example: you want to find out the price point of a new product you can make a test. 50% of the users are left out of the test, with $5 price. The remaining 50% are split equally into 5 A/B test versions ($5 control group, $10 version 1, $15 version 2, $20 version 3, $25 version 4).&lt;/p&gt;

&lt;h3&gt;
  
  
  Professional commitment ✍
&lt;/h3&gt;

&lt;p&gt;I, the developer, swear &lt;strong&gt;not to be biased&lt;/strong&gt;. We cannot allow any personal/technical difference or issue to affect the A/B test result (user behaviors) for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;loading— make sure all the resources are loaded from the same source (CDN/hosting), so the network times are similar for the users&lt;/li&gt;
&lt;li&gt;size— make sure the file sizes are the same for all the versions, 1 button has 1mb background and the rest are 50kb&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…you get the picture. All the users must start from the same premise. If a technical irregularity appears please let the team know and repeat the test.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We, the developers are in charge of the implementation and technical details, we must guarantee the technical unbiased and act as a firewall.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;"I, the developer, swear to collect the right data from the users and do not mess with the tracking."&lt;/em&gt; Easy to say, hard to do. The main idea is that the A/B test result is based on the KPI events, by observing users behavior during the split test. Data anomalies can mean “bugs” or a clear “winner”.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Usually when something is too good to be real, it is a bug.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnyvlyshl8576olu0h3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnyvlyshl8576olu0h3f.png" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Good to have 🛠
&lt;/h3&gt;

&lt;p&gt;It’s easier to work with a better codebase. If your code is already a mess, the A/B tests will multiply it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modules&lt;/strong&gt; If the code is already split to modules (modules, files, classes) most likely you will only need to modify 1 portion of your code, if not … then you must like spaghetti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters and configs&lt;/strong&gt;. Everything in an A/B test is reduced to a parameter value, usually a string value. If your business logic has already the tested parameter as a variable or config value its very easy to implement the test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No magic values&lt;/strong&gt; If the parameter you are testing is hard coded in multiple places let this be your learning, do not use magic values (magic numbers are the most common mistake).&lt;/p&gt;

&lt;p&gt;... &lt;/p&gt;

&lt;p&gt;To read the full story you can continue on my website: &lt;a href="https://coder.today/tech/2017-09-22_ab-tests-developers-manual/" rel="noopener noreferrer"&gt;A/B tests developers manual&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Remember to share and subscribe if you learned something new, Thanks!&lt;/p&gt;

</description>
      <category>meta</category>
      <category>testing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Software Engineer Productivity: Workflow</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Fri, 21 Dec 2018 23:09:56 +0000</pubDate>
      <link>https://forem.com/bgadrian/software-engineer-productivity-workflow-5hce</link>
      <guid>https://forem.com/bgadrian/software-engineer-productivity-workflow-5hce</guid>
      <description>&lt;p&gt;Over the years I managed to reduce my daily coding time under 5h out of 8h and maintain the productivity using the following techniques. &lt;em&gt;And no, I cannot  scale horizontally, if I work more I don’t deliver more quality code.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This article was originally published on my blog: &lt;a href="https://coder.today/6-workflow-tips-for-a-software-engineer-productivity-ba35d9f7e267"&gt;https://coder.today/6-workflow-tips-for-a-software-engineer-productivity-ba35d9f7e267&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Productivity tips is a series of general purpose articles for people that code. The tips should apply to any environment,framework,language or platform.&lt;/p&gt;

&lt;p&gt;This story belongs to a multi-stream series:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/bgadrian/software-engineer-productivity-coding-jkp"&gt;Productivity: coding&lt;/a&gt; — concrete coding tips &amp;amp; tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coder.today/software-engineer-productivity-workflow-ba35d9f7e267"&gt;Productivity: workflow&lt;/a&gt; - this article&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Hourly brakes 🦋
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are a smoker skip this, you probably are already doing it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A few minutes brakes for each hour are good for my health (by walking) and increased my productivity. If you have a rest area with games or other interactive stuff go there, or just walk around the office. I am a bad example 🚭, I am the biggest “passive smoker” from the office because I often make these breaks in the smoking area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yw4KZHb8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AjS_MRrrwSvgsq048c51Trw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yw4KZHb8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AjS_MRrrwSvgsq048c51Trw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are applying the &lt;a href="https://en.wikipedia.org/wiki/Pomodoro_Technique"&gt;&lt;strong&gt;pomodoro 🍎&lt;/strong&gt; technique&lt;/a&gt; you are good already, just that my timer is 50m instead of 20m, at least for my current workflow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;”One of the best programming skills you can have is knowing when to walk away for awhile.” — Oscar Godson&lt;/p&gt;

&lt;p&gt;Developers type a lot but, but we need to think more and code less.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  “The Zone” is a risky addiction 🤠
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5SjrhIgp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ru8ux5aq14hg68gf6zd5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5SjrhIgp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ru8ux5aq14hg68gf6zd5.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hourly break has another advantage, it keep us from doing &lt;strong&gt;“the zone” ⏰ overtime&lt;/strong&gt;, that will most likely hurt the code. When you are deep inside the problem is hard to see the edge.&lt;/p&gt;

&lt;p&gt;I think that &lt;strong&gt;“the zone” is our natural environment.&lt;/strong&gt; You will find a developer there most often writing #happycode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt; there is a threshold 🚸, you can &lt;strong&gt;focus “too much”&lt;/strong&gt; on the problem/code, as a result you will code “in a vacuum”, &lt;strong&gt;“in a bubble”&lt;/strong&gt;. When you exit the bubble you realize you forgot stuff because your entire &lt;strong&gt;attention focus had a very small scope&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;“I forgot we have that functionality in X module, I just wrote a new one”&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;“I forgot that I should have talk to X for this task”&lt;/em&gt; (edge cases or implementation details)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;“I skipped the Unit Tests, I will do them tomorrow, they slowed me down”&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“I used something that is not supported on X platform, I forgot”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically you are prune to do all the mistakes that usually appear &lt;strong&gt;when you are in a hurry, pressed by time or when you are not paying attention.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most of the times, “the zone” give us the “productivity illusion” 💨.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;I am 100% sure you will write more code, but what about it’s quality?&lt;/strong&gt; To really see if the code was better you have to measure the time spent writing the original iteration + time spent to fix it + time spent to debug it + the effects it’s bugs, during the entire code production lifespan. &lt;strong&gt;In the “zone overtime“ you have a quick first iteration (“finish fast”), but the later stages duration are heavily increased.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“The zone overtime” also appears when the developer uses &lt;strong&gt;his brain as a Heap&lt;/strong&gt; 🗒, by trying to understand a piece of code (usually a rotten code to replicate a bug). &lt;em&gt;This can be mitigated in more ways, one is: refactor the code first and use a proper debugger.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Among the years I found a few scenarios when &lt;strong&gt;“the zone overtime”&lt;/strong&gt; is good for business:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;When the entire project fits in your head&lt;/strong&gt; — more exactly when you are the only developer or the project is small. &lt;/li&gt;
&lt;li&gt;When you are doing a prototype or the first version of a library. &lt;/li&gt;
&lt;li&gt;When you are working on a single but complex algorithm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other than these cases, I didn’t found any good scenario for a developer to spend more than 40–70 min “in the zone”, without making at least 1 mistake that invalidates part of the code resulted.&lt;/p&gt;

&lt;p&gt;PS: this is a generalization, I’m sure there are exceptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distractions 👏🏽
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A61VeTxy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AqmfPbxNOBvk3TeHoQF4DJg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A61VeTxy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AqmfPbxNOBvk3TeHoQF4DJg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observe yourself, remember what caused the most interruptions or search for patterns. &lt;em&gt;Try to fix these, yourself if you can or talk about them in your periodical team retrospective meetings.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It can be the staging server crashing ,the constant social media checking or the noise of the coffee machine. The distraction can take many forms.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Easy to say than done: &lt;strong&gt;don’t login&lt;/strong&gt; on social networks 📪.&lt;/p&gt;

&lt;p&gt;If your colleagues keep disturbing you just print &amp;amp; stick this to a nearby wall:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--pYp1hmjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1326388037/Pierre_normal.jpg" alt="Jason Heeris profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Jason Heeris
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @detly
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      This is why you shouldn't interrupt a programmer: &lt;a href="http://t.co/K2dNXKzjem"&gt;twitpic.com/dj27dh&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      09:20 AM - 28 Oct 2013
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=394755439314755584" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=394755439314755584" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2462
      &lt;a href="https://twitter.com/intent/like?tweet_id=394755439314755584" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      1031
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q5VG77Cr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/u2xyjbjd9w3xkgd0inae.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q5VG77Cr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/u2xyjbjd9w3xkgd0inae.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn to detach the debugger — your brain 😨
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you are stuck more than 5–15 min on a single issue run away. You are in a maze and you do not realize it 🤔&lt;/strong&gt;. You will hurt yourself and most likely the code. By wasting time you are hurting the team/product/employer too.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Step away 🏃🏿, think more or not at all, talk to others, detach the debugger and return later with a broader perspective.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Use your brain as a queue 👩🏾‍💻
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--erpslmle--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AoXlxny_y0eIozmK5UlRlDw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--erpslmle--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AoXlxny_y0eIozmK5UlRlDw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to handle incoming requests, while you are working:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If busy &lt;em&gt;{add the new task on the TODO list}&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If they contacted you in person &lt;em&gt;{recommend them to use an async communication system like chat/email next time}.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reconsider the &lt;strong&gt;priorities&lt;/strong&gt; when the current task is over&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For this technique to work you need to divide your daily tasks in smaller chunks and do hourly breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notifications 👋
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7UALnsdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2aruzqtigh6s1179txt1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7UALnsdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2aruzqtigh6s1179txt1.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good notifications:&lt;/strong&gt; can be used to eliminate a &lt;strong&gt;distraction&lt;/strong&gt;, example: instead of checking the team chat every 10s you can setup @mention notification alerts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad notifications:&lt;/strong&gt; you received a newsletter.&lt;/p&gt;

&lt;p&gt;Silent as many notifications as possible. Do whatever it works for you to save more time. Tip: Smartphones have DND intervals, so they remain silent during the nights and work times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile 👩‍💻
&lt;/h2&gt;

&lt;p&gt;Be mobile, use a laptop. Never mind, of course that you already using a laptop, erase this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks! 🤝
&lt;/h2&gt;

&lt;p&gt;Please send me your feedback so I can improve the following posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other resources 📚
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.sebastiansylvan.com/post/the-perils-of-future-coding/"&gt;&lt;strong&gt;The Perils of Future-Coding&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dmitri.shuralyov.com/idiomatic-go"&gt;&lt;strong&gt;Idiomatic Go&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lifehacker.com/5920484/what-is-the-zone-anyway"&gt;&lt;strong&gt;What Is 'The Zone' Anyway?&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.quora.com/What-are-the-5-tips-of-a-productive-developer"&gt;&lt;strong&gt;What are the 5 tips of a productive developer?&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/the-mission/the-pomodoro-method-for-increased-productivity-explained-in-37-seconds-ce2b135b1b7b"&gt;&lt;strong&gt;The Pomodoro Method for Increased Productivity, Explained in 37 Seconds 🎥&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sVTLN9hs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/bqgkzxde9j84qpcbj7sp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sVTLN9hs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/bqgkzxde9j84qpcbj7sp.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>agile</category>
    </item>
    <item>
      <title>I was a (social) Game Developer for 5 years, Ask Me Anything!</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Fri, 30 Nov 2018 20:44:50 +0000</pubDate>
      <link>https://forem.com/bgadrian/i-was-a-social-game-developer-for-5-years-ask-me-anything-4hh7</link>
      <guid>https://forem.com/bgadrian/i-was-a-social-game-developer-for-5-years-ask-me-anything-4hh7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5z575wdel0z74h551dz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5z575wdel0z74h551dz.jpg" alt="cards" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recently "ended" my professional career as a Game developer (as in will no longer work for game studios). Being a full stack web developer I ended up doing Social games, On Facebook platform, web and mobile (Unity 3D), mostly card games.&lt;/p&gt;

&lt;p&gt;I am also a Unity(3D) Certified Programmer, I develop games as a hobby, I have a passion for Game design, I was a Gamer (MMO addicted, clan leader) and I love any kind of game, I even designed a few small Board Games in my free time. I played with many related gadgets at work (as a dev): Sphero, Leap Motion, VR headsets.&lt;/p&gt;

&lt;p&gt;Before being a game dev I worked 5 years in e-commerce and now as a Cloud Engineer.&lt;/p&gt;

&lt;h4&gt;
  
  
  TTL: I will try to answer all questions for ~2 days (1-2 Dec)
&lt;/h4&gt;

</description>
      <category>ama</category>
      <category>javascript</category>
      <category>gaming</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>From monolith to cloud: Auto Increment to UUID</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Tue, 20 Nov 2018 19:20:25 +0000</pubDate>
      <link>https://forem.com/bgadrian/from-monolith-to-cloud-auto-increment-to-uuid-10ki</link>
      <guid>https://forem.com/bgadrian/from-monolith-to-cloud-auto-increment-to-uuid-10ki</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on my website &lt;a href="https://coder.today/software-engineer-from-monolith-to-cloud-auto-increment-to-uuid-a62f92f387c4" rel="noopener noreferrer"&gt;https://coder.today/software-engineer-from-monolith-to-cloud-auto-increment-to-uuid-a62f92f387c4&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  From monolith to cloud series 🌩
&lt;/h2&gt;

&lt;p&gt;A series of articles designed to help developers switch from a monolith to a cloud mindset. The web is full of very good tutorials and examples on Why and How to make the switch, so I decided to focus on the small details.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coder.today/software-engineer-from-monolith-to-cloud-auto-increment-to-uuid-a62f92f387c4" rel="noopener noreferrer"&gt;Auto Increment to UUID&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coder.today/software-engineer-from-monolith-to-cloud-think-small-f828effc6afc" rel="noopener noreferrer"&gt;Think small&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This article focuses on the developers who worked only with numeric auto increment primary keys and need/want to switch to UUID’s.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ID int NOT NULL AUTO_INCREMENT 🔢
&lt;/h2&gt;

&lt;p&gt;Entries in a relational database like MySql/SQL/Oracle are usually identified by an incremental, unique (to table) number int(2232). The server collects the parameters, sends an INSERT(...) statement and the database generates a new ID (the next incremental value) and returns it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  When you begin to scale you may end up with a bottleneck, your MySql master instance, because that is the only entity from your system that can generate a unique identifier.
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;You &lt;strong&gt;already know the benefits&lt;/strong&gt; of an auto increment PK’s , here is a list of its limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;need to have access (through a pipeline/API/server/connection) to the master instance&lt;/li&gt;
&lt;li&gt;you depend on 1 instance from 1 server from 1 data-center (latency, availability)&lt;/li&gt;
&lt;li&gt;all the write operations are done in a single location (most of the cases), this leads to a hardware limitation of generating new ID’s&lt;/li&gt;
&lt;li&gt;easy to spoof ID’s (bonus: you can easily find out the number of customers)&lt;/li&gt;
&lt;li&gt;MAX_INT — it’s a long shot, but still …worth mentioning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these issues can be mitigated to a degree (ex &lt;a href="https://www.mysql.com/products/cluster/scalability.html" rel="noopener noreferrer"&gt;MySql sharding&lt;/a&gt;). To fix all of them you can use UUID’s.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhie69i1904t5wtddjqm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhie69i1904t5wtddjqm4.png" alt="UUID" width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://en.wikipedia.org/wiki/Universally_unique_identifier" rel="noopener noreferrer"&gt;UUID&lt;/a&gt; 🍱
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;universally unique identifier&lt;/strong&gt; (&lt;strong&gt;UUID&lt;/strong&gt;) is a 128-bit &lt;strong&gt;number&lt;/strong&gt; used to identify information in computer systems. The term &lt;strong&gt;globally unique identifier&lt;/strong&gt; (&lt;strong&gt;GUID&lt;/strong&gt;) is also used. The size of the UUID can differ on implementations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  UUID can be used in &lt;a href="https://stackoverflow.com/questions/5230638/mysql-autoincrement-to-guid" rel="noopener noreferrer"&gt;relationship databases&lt;/a&gt; and viceversa, auto incrementing in NoSql.
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;In its canonical textual representation it’s a 32 &lt;a href="https://en.wikipedia.org/wiki/Hexadecimal" rel="noopener noreferrer"&gt;hexadecimal&lt;/a&gt; (base 16) digits, displayed in five groups separated by 4 hyphens: &lt;code&gt;123e4567-e89b-12d3-a456-426655440000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Some bits represent the UUID &lt;strong&gt;version&lt;/strong&gt; (the algorithm used to generate it), others the variant. Starting from a UUID format you can even add your own logic (bits representing some aspects of your business logic).&lt;/p&gt;

&lt;p&gt;To generate the random bytes of the UUID more factors are used to ensure a better entropy like the timestamp and the clock sequence. For more technical details you can read the &lt;a href="https://www.ietf.org/rfc/rfc4122.txt" rel="noopener noreferrer"&gt;Official Protocol paper of the UUID&lt;/a&gt;. Beware of the implementation you use, &lt;strong&gt;not all the libraries respect the standard&lt;/strong&gt;. I have found some implementations that just use the predictable pseudo-random function found in every language to generate a number.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Basically the UUID/GUID is a random ID, the values are not sequential and anyone can create a new ID.
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd44vdyzlii30x3dmu3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd44vdyzlii30x3dmu3k.png" width="414" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are a few advantages over a linear incremental value&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it’s easier to shard&lt;/li&gt;
&lt;li&gt;it’s easier to merge/replicate. There is no universal order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;more flexibility&lt;/strong&gt; — you can generate UUID’s outside of the database, delegate to servers or clients, environment/platform independent, but &lt;strong&gt;you may lose some data integrity&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;you can even allow &lt;strong&gt;offline&lt;/strong&gt; register (and sync when available), but you will never have a full DB snapshot (because of the out of sync clients)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;scaling&lt;/strong&gt; —UUID has a large…r limit of ID’s than an INT&lt;/li&gt;
&lt;li&gt;you &lt;strong&gt;know the ID&lt;/strong&gt; before the insert, it can simplify the logic/flow&lt;/li&gt;
&lt;li&gt;the UUID can have your &lt;strong&gt;own format&lt;/strong&gt;, you can split it in 4 numbers and each one of them represent something else, for example if you group the users from 20 websites, the first number can represent the application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frfcpqfxuzge1ogd4zhum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frfcpqfxuzge1ogd4zhum.png" alt="Monolith vs Cloud: AUTO PKID vs UUID" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The new mindset 🤕
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm5wlszt458be06ihr2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm5wlszt458be06ihr2k.png" width="540" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will have to get used to &lt;strong&gt;a more difficult debugging process&lt;/strong&gt;, UUID’s are impossible to remember. The trick of memorizing the first or last characters will probably not work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The change is hard&lt;/strong&gt; (any change) for the human brain, you will try to fight it, most likely using cheap reasons: an INT is prettier, occupies less storage space. Embrace the change for a greater good, is part of the software evolution.&lt;/p&gt;

&lt;p&gt;New factors in town based on &lt;strong&gt;async: time and location&lt;/strong&gt;. An UUID may exists somewhere, but is not synced YET or it’s in other shard. There is no universal sync view anymore. Your production is in &lt;strong&gt;chaos&lt;/strong&gt; now, &lt;strong&gt;distribution&lt;/strong&gt; can mess up your karma, don’t feel frustrated, is just another way of doing stuff.&lt;/p&gt;

&lt;p&gt;A few bad things can result of distribution: &lt;strong&gt;duplicate or lost data&lt;/strong&gt;. This means extra coding and extra meetings to explain why and how to the product owners.&lt;/p&gt;

&lt;p&gt;I do not think that UUID are universal better or worst than incremental ID’s, they just serve different purposes. But …&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  I will recommend using UUID’s for any new apps, the current state of software needs demand iXXXt (scaling apps, multiple type of clients &amp;amp; platforms, offline apps…).
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Before you go, I recommend reading some more:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coder.today/software-engineer-from-monolith-to-cloud-think-small-f828effc6afc" rel="noopener noreferrer"&gt;Software engineer — from monolith to cloud: think small&lt;/a&gt; How does the switch to containers and microservices affect our mindset and workflow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pinterest has a &lt;a href="https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f" rel="noopener noreferrer"&gt;fleet of MySql shards and uses local auto increment&lt;/a&gt; ID, in the end they replicate a NoSql (generate UUID’s and store json). Same as Twitter and Facebook they used the wrong technologies from the start and tried to patchup things as their product got bigger.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The caveats and issues with UUID in production: &lt;a href="https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439" rel="noopener noreferrer"&gt;UUID or GUID as Primary Keys? Be Careful!&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;General comparison between the most used NoSQL storage solutions:&lt;br&gt;
&lt;a href="https://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis" rel="noopener noreferrer"&gt;Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Hypertable vs…&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.mongodb.com/blog/post/generating-globally-unique-identifiers-for-use-with-mongodb" rel="noopener noreferrer"&gt;Generating Globally Unique Identifiers for Use with MongoDB&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification" rel="noopener noreferrer"&gt;ObjectId - Operational Segregation in MongoDB&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/703035/when-are-you-truly-forced-to-use-uuid-as-part-of-the-design/786541#786541" rel="noopener noreferrer"&gt;When are you truly forced to use UUID as part of the design?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are specific scenarios when do you need incrementing ID’s, like a queue: &lt;a href="https://fygt.wordpress.com/2013/06/19/auto-incrementing-keys-with-nosql-solutions/" rel="noopener noreferrer"&gt;Auto Incrementing Keys in NoSql&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thanks!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Please (like)👏 and subscribe if you learned something new. Send me your feedback so I can improve the following posts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09o46e27xmqbl082gmbm.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09o46e27xmqbl082gmbm.jpeg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>database</category>
      <category>webdev</category>
      <category>nosql</category>
    </item>
    <item>
      <title>Advanced JavaScript panels</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Mon, 12 Nov 2018 22:29:38 +0000</pubDate>
      <link>https://forem.com/bgadrian/advanced-javascript-panel-talks-4b5o</link>
      <guid>https://forem.com/bgadrian/advanced-javascript-panel-talks-4b5o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Previously published on my blog &lt;a href="https://coder.today/advanced-javascript-2017-talks-fcc3717a9f3f" rel="noopener noreferrer"&gt;https://coder.today/advanced-javascript-2017-talks-fcc3717a9f3f&lt;/a&gt;. It contains some of the best (in my oppinion ofc) talks from 2017 JS conferences about internals and how things works. Even if they are "old" they are not outdated, hopefully you will learn many new things about your favorite language!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The success of JavaScript filled up the internet with low-entry level resources, introductions and tutorials. I do not complain but as result it is hard to find advanced topics about JavaScript.&lt;/p&gt;

&lt;p&gt;I watch a lot of YouTube videos so I decided to share with you the most recent videos I found on advanced topics of JavaScript. Let’s dive in:&lt;/p&gt;

&lt;h2&gt;
  
  
  V8, Advanced JavaScript, &amp;amp; the Next Performance Frontier (Google I/O ‘17)
&lt;/h2&gt;

&lt;p&gt;This video will give a very good insight into the browser’s JavaScript engine, how it works and what are the optimization techniques. In the 2nd part he will go into the details and explain the new V8 engine, why &amp;amp; how it was made, and how it will improve our NodeJS and Client apps. Performance vs fast startup &amp;amp; low memory vs max optimization.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/EdFDJANJJLs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Compiling for the Web with WebAssembly (Google I/O ‘17)
&lt;/h2&gt;

&lt;p&gt;There are many panels about WebAssembly, but this one is more relevant nowadays and I think it does a better job explaining how &amp;amp; why we will use Native libraries in the JavaScript apps. You will also find out the limitations of working with WebAssembly.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6v4E6oksar0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Arindam Paul — JavaScript VM internals, EventLoop, Async and ScopeChains
&lt;/h2&gt;

&lt;p&gt;If you skip the first 5 minutes and the hard to understand English accent you will learn a lot about JavaScript run time, memory model, scope chains and closure.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QyUFheng6J0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Node’s Event Loop From the Inside Out by Sam Roberts, IBM
&lt;/h2&gt;

&lt;p&gt;This is a very technical glance into the NodeJS event loop. Find out what makes JavaScript “tick” on the server side.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/P9csgxBgaZ8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Denis Radin: Applying NASA coding standards to JavaScript | JSConf EU 2017
&lt;/h2&gt;

&lt;p&gt;Will you fly an airplane that is run by JavaScript? You will learn about some rules a scientific facility learned &amp;amp; applied while making a very stable &amp;amp; safe system using JavaScript. They work with NASA &amp;amp; appreciate clean, fast &amp;amp; stable code.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/z8hG-3Ak_b4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Async and Concurrency Patterns in JavaScript
&lt;/h2&gt;

&lt;p&gt;It is only an introduction in the Concurrency topic, the full story last for many hours, but this is a good summary. Kyle Simpson speaks his minds about Promises, Generators, async &amp;amp; other cool new stuff from JS6.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Qg1SvpIau6U"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Anjana Vakil: Immutable data structures for functional JS | JSConf EU 2017
&lt;/h2&gt;

&lt;p&gt;Immutability isn’t a new topic in JavaScript, &lt;a href="https://facebook.github.io/immutable-js/" rel="noopener noreferrer"&gt;immutable.js &lt;/a&gt;is here for a long time. But I think most of the junior-mid JavaScript developers do not use this paradigm because they do not understand it, and what you do not understand you are afraid. Also I think she is a good speaker and a good panel. You will learn some techniques used in functional programming, and they will improve your code quality!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Wo0qiGPSV-s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks! 🤝
&lt;/h2&gt;

&lt;p&gt;Similar topics: &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://coder.today/what-can-you-do-with-javascript-resistance-is-futile-536a1938e23b" rel="noopener noreferrer"&gt;What can you do with JavaScript? 🤖Resistance is futile.&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://coder.today/nasa-coding-standards-defensive-programming-and-reliability-a-postmortem-static-analysis-832d0f146b6f" rel="noopener noreferrer"&gt;Defensive programming and reliability. Analysis of post mortem NASA software.&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy4mxmoo4hpvkiwjf5rz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy4mxmoo4hpvkiwjf5rz.jpeg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Software Engineer Productivity: coding</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Tue, 30 Oct 2018 10:16:11 +0000</pubDate>
      <link>https://forem.com/bgadrian/software-engineer-productivity-coding-jkp</link>
      <guid>https://forem.com/bgadrian/software-engineer-productivity-coding-jkp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was posted on my blog &lt;a href="https://coder.today/software-engineer-productivity-coding-75fa21d3804"&gt;https://coder.today/software-engineer-productivity-coding-75fa21d3804&lt;/a&gt;. This is a revised version of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Productivity tips&lt;/strong&gt; is a series of general purpose articles for people that code. The tips should apply to any environment, framework, language or platform.&lt;/p&gt;

&lt;p&gt;This story belongs to a multi-stream series:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Productivity: coding — this article&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/bgadrian/software-engineer-productivity-workflow-5hce"&gt;Productivity: workflow — behavior &amp;amp; environment tips&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am lazy but I care about the most precious currency we have: &lt;strong&gt;time ⏰. That being said I want to share some tips that improved my efficiency.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;TR 🕮
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;automate everything&lt;/li&gt;
&lt;li&gt;learn &amp;amp; customize your tools&lt;/li&gt;
&lt;li&gt;store your snippets &amp;amp; other tips&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Automate commands 🤖
&lt;/h3&gt;

&lt;p&gt;Observe yourself, find out what &lt;strong&gt;commands you type multiple times&lt;/strong&gt; each day and shorten them, group them if needed. If you used only a git visual client you should learn the underlying commands.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;almost everything. I usually deliver the last command from an important chain manually (ex &lt;code&gt;test&amp;amp;&amp;amp;build&amp;amp;&amp;amp;copy&amp;amp;&amp;amp;upload&lt;/code&gt; then manual deploy).&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Using aliases you will do fewer human mistakes, and deliver more. Eliminate the boring steps from your daily routines.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The downside of custom aliases are: &lt;strong&gt;inflexibility and cognitive load&lt;/strong&gt;. Meaning the aliases are only in one environment (ex your work laptop), and you have to remember them.&lt;/p&gt;

&lt;p&gt;I recommend also to &lt;a href="https://github.com/git/git/blob/master/contrib/completion/git-completion.bash"&gt;git auto complete&lt;/a&gt; or frameworks like &lt;a href="https://github.com/Bash-it/bash-it"&gt;bash-it&lt;/a&gt;, they are usually developed with some logic (in command naming) and they are easier to remember. Search for bash helpers built for your language, framework, platform.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not having to type the current git branch name saved me over 1M characters typed and using aliases I avoided many possible mistakes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even if you do not use aliases, practies like using &lt;code&gt;HEAD&lt;/code&gt; instead of &lt;code&gt;master&lt;/code&gt; it will make you less prune to human errors, example get use to type &lt;code&gt;git pull origin HEAD&lt;/code&gt; instead of &lt;code&gt;git pull origin master&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Even if you are on Windows you can use Bash, I use &lt;a href="https://git-for-windows.github.io/"&gt;Git bash from Git for Windows&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bash tip: learn to use &lt;a href="http://lifehacker.com/278888/ctrl%252Br-to-search-and-other-terminal-history-tricks"&gt;bash history, especially CTRL+R&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Customize your tools 🌂
&lt;/h3&gt;

&lt;p&gt;You spend a lot of your time working with the IDE, bash and other tools. Customize &lt;strong&gt;your&lt;/strong&gt; tools based on &lt;strong&gt;your&lt;/strong&gt; needs and feelings. You should 💙 using them, otherwise your job will suck. If you hate something change it now (like a missing keyboard shortcut, display colors), go, on, fix it and return, I’ll wait.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I like to my bash to be cheerful, colored, and all my editors have black themes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Customize your environment
&lt;/h3&gt;

&lt;p&gt;Make your &lt;strong&gt;environment work for you, not against you&lt;/strong&gt;. The most basic example is to add in your global git &lt;code&gt;.gitignore&lt;/code&gt; file your IDE files. You will save &lt;strong&gt;time&lt;/strong&gt;, by doing it only once per machine, instead for each project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#~/.gitignore&lt;/span&gt;
.idea/
.vs/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Observer yourself, what other system settings were problematic in the past, firewall rules? python versions? Unity3D local cache? Solve them once it for all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn your tools 🏧
&lt;/h3&gt;

&lt;p&gt;As you learn new development techniques, new frameworks, paradigms and design patterns you should learn the tools that were designed for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text editors are for editors that write text, IDE’s are for professional developers.&lt;/strong&gt; Why? because we care about our time, we are professional, we are getting paid for our time, we want to deliver as much as we can in this time. IDE’s are heavier, because they have more builtin features designed for us. &lt;em&gt;PS: a text editor with tens of plugins like compiler/git/linter integration is an IDE.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Improve your skills by stepping out of your comfort zone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Upgrade your IDE and learn the new features,most likely the will fit your needs. Search for a new IDE once in a while, you may be surprised.&lt;/p&gt;

&lt;p&gt;A big productivity gain you’ll get by using more &lt;strong&gt;&lt;em&gt;keyboard shortcuts&lt;/em&gt;&lt;/strong&gt;. The “&lt;strong&gt;expand selection&lt;/strong&gt;” for example saved me a lot of time along the years. Other examples are &lt;strong&gt;live templates and multi-cursors&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OGdyz9Ov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fq646knupdm1xg9knxx6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OGdyz9Ov--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fq646knupdm1xg9knxx6.gif" alt="ide1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One live template I often use is debugging messages like if &lt;code&gt;IsDebugBuild {print("msg", var)}&lt;/code&gt; or try/catch expressions.&lt;/p&gt;

&lt;p&gt;You may use some regex replaces now and then, but sometimes multi-cursors are simpler and more efficient.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ujM9oo5S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2458q8t3dfwppnbxb5pg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ujM9oo5S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2458q8t3dfwppnbxb5pg.gif" alt="ide2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good enough scenarios for multi-cursors: hard coded data, Enums, templates and everything that is boring mostly.&lt;/p&gt;

&lt;p&gt;The latest feature I saw for an &lt;a href="https://www.codota.com/"&gt;IDE is a machine learning helper (Codota)&lt;/a&gt;. It knows about all open-source code, design patterns and mistakes made by other devs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automate your dev env 🎰
&lt;/h3&gt;

&lt;p&gt;Last time I got a new job it took a few full days to make a full working dev setup for a big project. It doesn’t have to be like this, there are tools designed for these kinds of automation. &lt;a href="http://boxstarter.org/"&gt;Boxstarter&lt;/a&gt; (I haven’t used it yet) can build your &lt;strong&gt;windows&lt;/strong&gt; dev env in a manner of minutes, from a snippet of code.&lt;/p&gt;

&lt;p&gt;I started to use &lt;strong&gt;Docker&lt;/strong&gt; for these kind of things. Using simple CLI instructions you can install most of the tools/services/software you need. No need for compilation, search for packages or binaries.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Example: a persistent mongo-db instance with a specific version and a visual administration tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Do not be a 🔨
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“To a man with a hammer, everything looks like a nail.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you need a system script do not use JavaScript for it, learn a bit of bash, ask a coworker or stack overflow how. If you need a small browser animation learn CSS3. You get the point. &lt;strong&gt;It will take you a few extra minutes but it will open a huge gate 🚪 in your future.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most of the engineers have this problem. I used to make everything in PHP, CS graduates get stuck in Java or CPP. It’s human nature, the designers do the same mistake with Photoshop, the QA usually with a bug tracking software like Jira.&lt;br&gt;
The idea is to expand your tool set, baby steps, 1 small script at a time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  * on save 💾
&lt;/h3&gt;

&lt;p&gt;Automate everything you can at “save file” action, the most common thing I activate is &lt;strong&gt;“auto-format on save”&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Auto-format enables me to write quick &amp;amp; dirty code, I do not waste time on indentation, commas, semi colons or other beautification elements, that’s the IDE’s job.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Auto-format also eliminates more human mistakes like actually forgetting to format and generate git conflicts or stupid commits afterwards. You and your coworkers will be more productive.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The IDE Is here to help you, let it do IT’s work&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can make your own mini pipeline on save, depending on your needs: compilation, error checking, unit tests, hot push code (for web dev, js &amp;amp;css), you name it. For more time consuming scripts I use manual triggered Tasks.&lt;/p&gt;

&lt;p&gt;For example, in &lt;strong&gt;Go&lt;/strong&gt; I activate &lt;strong&gt;“run tests &amp;amp; coverage on save”&lt;/strong&gt;, having the console open at all time improved my efficiency. I can work faster without being afraid to refactor, each minute I know that the code is fine, or not.&lt;/p&gt;

&lt;h3&gt;
  
  
  TODO 🔖
&lt;/h3&gt;

&lt;p&gt;Use more &lt;code&gt;//TODO's&lt;/code&gt; in your code. Do not brake your current flow, do not exit “the zone” by solving an adjacent thing. If you hit a small bump dump a TODO and return later with a better, larger perspective.&lt;/p&gt;

&lt;h3&gt;
  
  
  Snippets 📚
&lt;/h3&gt;

&lt;p&gt;Do not store snippets on chat, like a few of my friends did, you can use &lt;a href="https://gist.github.com/"&gt;Gists&lt;/a&gt; or other similar services. Your own repo, a doc in google drive, you name it. The idea is to store snippets of code that &lt;strong&gt;prove useful and were hard to find/achieve&lt;/strong&gt;. It will save you &lt;strong&gt;time&lt;/strong&gt;, your future time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Share 1-n
&lt;/h3&gt;

&lt;p&gt;We can extrapolate the previous solutions to other problems. If a coworker has a problem, and you are going to help him, most likely there will be other coworkers that will need that answer, in the future. As a thumb of rule, use &lt;strong&gt;1-n persistent communication channels&lt;/strong&gt;, &lt;strong&gt;sharing is caring&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Keep a project minimal documentation, write articles/stories, even if they are just internal. Record your internal meetups, &lt;br&gt;
the idea is to not solve problems with emails/private chats, &lt;strong&gt;share the knowledge&lt;/strong&gt; so other can access it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It will save you &lt;strong&gt;time&lt;/strong&gt; because you will not have to explain/solve the same problems twice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Automate your API calls 📝
&lt;/h3&gt;

&lt;p&gt;If you work with API’s of any kind I recommend using a tool like &lt;a href="https://www.getpostman.com/"&gt;Postman&lt;/a&gt;. If you keep your calls in one place, you can even automate them (in a continuous delivery pipe), share them with your coworkers (as config files) and validate the responses (with a json schema lib). I used to keep the tests in the same repo as the server API source code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thanks! 🤝
&lt;/h3&gt;

&lt;p&gt;Please send me your feedback so I can improve the following posts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other resources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://coder.today/6-workflow-tips-for-a-software-engineer-productivity-ba35d9f7e267"&gt;Productivity: workflow — behavior &amp;amp; environment tips&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/"&gt;The Joel Test: 12 Steps to Better Code&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yKH_uExg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7m44hjlg0ucepy7sop1u.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yKH_uExg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7m44hjlg0ucepy7sop1u.jpeg" alt="end"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>meta</category>
      <category>productivity</category>
      <category>programming</category>
      <category>git</category>
    </item>
    <item>
      <title>Barking at the right tree (1000 followers)</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Wed, 17 Oct 2018 15:40:05 +0000</pubDate>
      <link>https://forem.com/bgadrian/barking-at-the-right-tree-1000-followers-1lkf</link>
      <guid>https://forem.com/bgadrian/barking-at-the-right-tree-1000-followers-1lkf</guid>
      <description>&lt;h2&gt;
  
  
  New milestone
&lt;/h2&gt;

&lt;p&gt;Hello!&lt;/p&gt;

&lt;p&gt;I've reached a new (biggest so far) milestone in my ... publishing career, sort to speak ... more exactly 1000 followers on dev.to&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9ZPMAwJU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/tweet_video_thumb/DpuA7KEXUAET_XX.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--iM7eo_b4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1017491177774419974/cQqErhiG_normal.jpg" alt="BG Adrian ⚛ profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        BG Adrian ⚛
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @b3at
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      All these years I was "barking at the wrong trees"&lt;br&gt;Twitter - 10 years - 226 followers&lt;br&gt;Medium - 1 year - 234 followers&lt;br&gt;&lt;a href="https://twitter.com/ThePracticalDev"&gt;@ThePracticalDev&lt;/a&gt; - 1 year - 1020 followers 🕺&lt;br&gt;New articles .... here I come! 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      15:07 PM - 17 Oct 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1052576779813171200" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1052576779813171200" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1052576779813171200" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      2
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Like I said on twitter, I was "writing" on the wrong platforms all this long.&lt;/p&gt;

&lt;p&gt;I made some experiments and studies on different social media channels, from instagram to linkedin, and I could throw &lt;em&gt;poo&lt;/em&gt; all day long, but you can just look at the top content to see for yourself. &lt;/p&gt;

&lt;h2&gt;
  
  
  Dev.to
&lt;/h2&gt;

&lt;p&gt;Here you do not have to be a super star in order to have people read your content. &lt;/p&gt;

&lt;p&gt;I will treat this event as a good sign. I will continue to write and help as many devs as I can. I have some big plans for next year, the people I am currently helping encourage me as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new blog stack (transit to Hugo, medium no longer fits my needs, 8s loading time ...)&lt;/li&gt;
&lt;li&gt;finish my 12+ series of &lt;a href="https://coder.today/docker-01-first-steps-of-your-web-app-pragmatic-intro-series-ee281a3b440d"&gt;Pragmatic Docker&lt;/a&gt; tutorials and real examples for developers&lt;/li&gt;
&lt;li&gt;start a &lt;strong&gt;Youtube&lt;/strong&gt; channel (I have previous editing experience, I just need some hardware and to improve my English), mostly for Programming and Cloud basic tutorials. I want to cover all the missing topics from &lt;strong&gt;Bootcamps&lt;/strong&gt; and  courses.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Context: now I am helping junior developers on 1-1 sessions, and I realized that I can help 1-n people just by recording the material, because most of the problems they encounter are common.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;finish 2 chapters of my book (long stretch, probably will not happen, but hey ... wishful thinking)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thank you !!!
&lt;/h2&gt;

</description>
      <category>meta</category>
      <category>career</category>
      <category>blog</category>
    </item>
    <item>
      <title>Fast priority queues in Golang: Hierarchical Queue</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Sat, 13 Oct 2018 14:49:49 +0000</pubDate>
      <link>https://forem.com/bgadrian/fast-priority-queues-in-golang-hierarchical-queue-2me8</link>
      <guid>https://forem.com/bgadrian/fast-priority-queues-in-golang-hierarchical-queue-2me8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on my website &lt;a href="https://coder.today/fast-priority-queues-in-go-hierarchical-queue-86daf6a7553a"&gt;https://coder.today/fast-priority-queues-in-go-hierarchical-queue-86daf6a7553a&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Writing O(1) high performance data structures is a multi-post series:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coder.today/fast-priority-queues-in-go-hierarchical-queue-86daf6a7553a"&gt;Hierarchical Queue&lt;/a&gt; (this article)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coder.today/fast-priority-queues-in-golang-hierarchical-heap-92960edd4aa9"&gt;Hierarchical Heap&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ladder Queue (soon)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;a href="https://en.wikipedia.org/wiki/Priority_queue"&gt;priority queue&lt;/a&gt; is an abstract data structure, used to store values (any data) with a priority. You can insert data at any time with any priority, but you can only take out the value with the highest priority.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://cdn-images-1.medium.com/max/2000/1*P5umJ1Wdc-qqRVtWOMyMIA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://cdn-images-1.medium.com/max/2000/1*P5umJ1Wdc-qqRVtWOMyMIA.gif" alt="Magic"&gt;&lt;/a&gt;&lt;em&gt;Magic&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use priority queues ⁉
&lt;/h2&gt;

&lt;p&gt;I confess, I didn’t use many of them in my apps, but there are a few &lt;a href="https://www.quora.com/Where-is-priority-queue-being-used"&gt;problems perfect&lt;/a&gt; for it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;triage — any processing you have based on a score/importance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ordering — when your data has a specific order of processing/analysis, ex: process the DAU KPI before MAU&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event driven simulation — priorities can be timestamps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Graph searching&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Load balancing — the priority is the inverse of the load&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Baby steps
&lt;/h2&gt;

&lt;p&gt;I started a long last &lt;a href="https://coder.today/go-go-go-flash-bang-d66f4c42eb7c"&gt;relationship with Go&lt;/a&gt;. I didn’t want my training to be in vain so I began to look for high performance data structures to implement (that aren’t already). After a few searches I ended up with this image, &lt;a href="https://www.researchgate.net/publication/222685597_Revisiting_priority_queues_for_image_analysis"&gt;snippet from a book&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn-images-1.medium.com/max/2210/1*3AkHiTG8E9hpnN2r3J9NZg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://cdn-images-1.medium.com/max/2210/1*3AkHiTG8E9hpnN2r3J9NZg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 2 bottom lines attracted my interest, they are O(1) multi-structure priority queues. First of them is the Hierarchical Heap, which is based on a Hierarchical Queue, so let’s dive in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn-images-1.medium.com/max/2000/1*vmpxla2vG2b5oxd_jxTMOQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://cdn-images-1.medium.com/max/2000/1*vmpxla2vG2b5oxd_jxTMOQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hierarchical Queue
&lt;/h2&gt;

&lt;p&gt;I couldn’t find any open-source code or pseudocode for this structure, if you find any issue please let me know.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“When the priority values are limited to small integers (e.g. digital images often have 8-bit or 12-bit integers as pixel values when they come off the imaging sensor), it is possible to allocate a FIFO queue (bucket) for each possible priority value. An array contains a pointer to each of these buckets, and when enqueueing an element, the correct bucket can be directly indexed using the priority value. Both enqueue and dequeue are O(1) operations.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Papers used for the algorithm and snippets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.cb.uu.se/~cris/Documents/Luengo2010a_preprint.pdf"&gt;Revisiting Priority Queues for Image Analysis, Cris L. Luengo Hendriks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://cmm.ensmp.fr/~beucher/publi/HQ_algo_desc.pdf"&gt;Hierarchical Queues: general description and implementation in MAMBA Image library, Nicolas Beucher and Serge Beucher&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a simple structure, very fast but it has a few limitations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It has only a &lt;strong&gt;limited number of priority values&lt;/strong&gt; (in my implementation is uin8(0–255)). Each value has it’s own queue, so increasing the number you end up with a memory overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the highest priority queue is empty, it is removed and the next queue can begin to empty, &lt;strong&gt;and it cannot be created again.&lt;/strong&gt; This means we must fill the queues before we start to dequeue, otherwise our performance will decrease , example: The dequeue process has only 1 priority left (255) and we enqueue other elements. All the new elements will be pushed in the 255 queue (because the 0–254 are empty and removed).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://cdn-images-1.medium.com/max/2000/1*1R4iZ4wrVdWtONwHkBmgDA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://cdn-images-1.medium.com/max/2000/1*1R4iZ4wrVdWtONwHkBmgDA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Go code go&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Priorities can be uint8 and values interface{} .&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I decided to remove the 2nd restriction,&lt;/strong&gt; I think it made the structure too restrictive for most of the real world scenarios. I managed to keep a very similar performance (≤ 50ns per operation). I cached the highest priority that has values and start to dequeue from there. In some cases, the Dequeue process can be &lt;strong&gt;O(1 + k)&lt;/strong&gt; , where K number of empty queues, but overall is amortized if the priorities are well balanced.&lt;/p&gt;

&lt;p&gt;This means that the life of the structure is extended, it can be reused and higher priority values can be added even after the dequeue process started.&lt;/p&gt;

&lt;p&gt;In the first iteration I used &lt;strong&gt;linked lists&lt;/strong&gt; as queues (used golang list.List), and the average operation time was 150–200ns. I ended up using a faster structure (thanks to a suggestion of Egon Elbre).  It reduced the operation time down to under 50ns &lt;em&gt;(it’s a pretty fast damn list)&lt;/em&gt;, see collection/deque:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;&lt;a href="https://github.com/karalabe"&gt;karalabe&lt;/a&gt; / &lt;a href="https://github.com/karalabe/cookiejar"&gt;cookiejar&lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;A contestant's algorithm toolbox&lt;/h3&gt;
  &lt;/div&gt;
&lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
CookieJar - A contestant's toolbox&lt;/h1&gt;
&lt;p&gt;CookieJar is a small collection of common algorithms, data structures and library extensions that were deemed handy for computing competitions at one point or another.&lt;/p&gt;
&lt;p&gt;This toolbox is a work in progress for the time being. It may be lacking, and it may change drastically between commits (although every effort is made not to). You're welcome to use it, but it's your head on the line :)&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;p&gt;To get the package, execute:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;go get gopkg.in/karalabe/cookiejar.v2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To import this package, add the following line to your code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import "gopkg.in/karalabe/cookiejar.v2"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For more details, see the &lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2" rel="nofollow"&gt;package documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Contents&lt;/h2&gt;
&lt;p&gt;Algorithms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Graph
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/graph/bfs" rel="nofollow"&gt;Breadth First Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/graph/dfs" rel="nofollow"&gt;Depth First Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Data structures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/collections/bag" rel="nofollow"&gt;Bag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/collections/deque" rel="nofollow"&gt;Deque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/graph" rel="nofollow"&gt;Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/collections/prque" rel="nofollow"&gt;Priority Queue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/collections/queue" rel="nofollow"&gt;Queue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/collections/set" rel="nofollow"&gt;Set&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/collections/stack" rel="nofollow"&gt;Stack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Extensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/exts/fmtext" rel="nofollow"&gt;fmt&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Scan&lt;/code&gt; and &lt;code&gt;Fscan&lt;/code&gt; for &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;float64&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt; and lines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://godoc.org/gopkg.in/karalabe/cookiejar.v2/exts/mathext" rel="nofollow"&gt;math&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Abs&lt;/code&gt; for &lt;code&gt;int&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Min&lt;/code&gt; and &lt;code&gt;Max&lt;/code&gt; for &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;big.Int&lt;/code&gt; and &lt;code&gt;big.Rat&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Sign&lt;/code&gt; for &lt;code&gt;int&lt;/code&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
&lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/karalabe/cookiejar"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
.

&lt;p&gt;Because concurrency is important in Go, the structure has a &lt;strong&gt;mutex&lt;/strong&gt;. It can be used manually or automatically (each function call blocks the mutex).&lt;/p&gt;

&lt;p&gt;To be as generic as could be, the queues can store any data type &lt;strong&gt;interface{}&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Packing up
&lt;/h2&gt;

&lt;p&gt;The Hierarchical Queue structure is part of “priorityqueue” package, it has 100% test coverage, examples, benchmarks and &lt;a href="https://godoc.org/github.com/bgadrian/data-structures/priorityqueue"&gt;documentation&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;&lt;a href="https://github.com/bgadrian"&gt;bgadrian&lt;/a&gt; / &lt;a href="https://github.com/bgadrian/data-structures"&gt;data-structures&lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;Abstract data structures Go packages, built with performance and concurrency in mind to learn Go.&lt;/h3&gt;
  &lt;/div&gt;
&lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
Data structures in Go &lt;a href="https://travis-ci.org/bgadrian/data-structures" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/8f2ccf15bd9c89177813ef9b166805150efef586/68747470733a2f2f7472617669732d63692e6f72672f626761647269616e2f646174612d737472756374757265732e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://codecov.io/gh/bgadrian/data-structures" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/8baf0865a00aed0f531c709dbba0157bb25c313e/68747470733a2f2f636f6465636f762e696f2f67682f626761647269616e2f646174612d737472756374757265732f6272616e63682f6d61737465722f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt; &lt;a href="https://goreportcard.com/report/github.com/bgadrian/data-structures" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/79a20a9bf2b4c13cbc51e562a5d89f6edf408bc5/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f626761647269616e2f646174612d73747275637475726573" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;I am writing a collection of packages for different data structures in GO.&lt;/p&gt;
&lt;p&gt;Why? To learn Go, practice basic structures and learning to code fast concurrent algorithms.&lt;/p&gt;
&lt;p&gt;All the packages have 100+% test coverage, benchmark tests and godocs. Tested with go 1.9.&lt;/p&gt;
&lt;h4&gt;
!! Warning This library wasn't used in production (yet). !!&lt;/h4&gt;
&lt;h2&gt;
&lt;a href="https://raw.githubusercontent.com/bgadrian/data-structures/master/priorityqueue/README.md"&gt;priorityqueue&lt;/a&gt;  &lt;a href="https://godoc.org/github.com/bgadrian/data-structures/priorityqueue" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/4f873f6a255f1397200db6d68678cf21c194f658/68747470733a2f2f676f646f632e6f72672f676f6c616e672e6f72672f782f746f6f6c732f636d642f676f646f633f7374617475732e737667" alt="GoDoc"&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A collection of performant, concurrent safe, complex abstract data structures used for priority queues.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Priority queue is an abstract data type which is like a regular queue or stack data structure, but where additionally each element has a "priority" associated with it. In a priority queue, an element with high priority is served before an element with low priority.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;a href="https://raw.githubusercontent.com/bgadrian/data-structures/master/priorityqueue/README.md"&gt;Hierarchical Queue&lt;/a&gt; &lt;a href="https://www.researchgate.net/figure/261191274_fig1_Figure-1-Simple-queue-a-and-hierarchical-queue-b" rel="nofollow"&gt;description&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;An &lt;strong&gt;O(1)/O(1+K) priority queue (very fast)&lt;/strong&gt; implementation for small integers, that uses an assembly of N simple queues. It is optimized for large amount of data BUT with small value priorities…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
&lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bgadrian/data-structures"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;The next data structure is the Hierarchical Heap, which is based on the Hierarchical Queue, removing it’s limitations for a small cost of performance.&lt;br&gt;
&lt;a href="https://coder.today/fast-priority-queues-in-golang-hierarchical-heap-92960edd4aa9"&gt;Fast priority queues in Golang: Hierarchical Heap&lt;/a&gt;. &lt;br&gt;
Hierarchical Heap is a very efficient Priority Queue O(log n/k) for large data sets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution
&lt;/h2&gt;

&lt;p&gt;It (was) my first library written in Go, I never used these algorithm in production, so please correct me if I did something wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks! 🤝
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cdn-images-1.medium.com/max/2560/1*gGB1I0XqPtpwGkaXm8L8kw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://cdn-images-1.medium.com/max/2560/1*gGB1I0XqPtpwGkaXm8L8kw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>opensource</category>
      <category>algorithms</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>16 free tools &amp; services that any developer should use</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Tue, 25 Sep 2018 17:25:24 +0000</pubDate>
      <link>https://forem.com/bgadrian/16-free-toolsservices-that-any-developer-should-use-4e7e</link>
      <guid>https://forem.com/bgadrian/16-free-toolsservices-that-any-developer-should-use-4e7e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is a 2018 revised version of my original article &lt;a href="https://coder.today/free-tools-for-any-developer-707761504f7f"&gt;https://coder.today/free-tools-for-any-developer-707761504f7f&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Free tools &amp;amp; services for any developer
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;I want to thank all the service providers and developers that allowed their product to be used for free. What is the best way to repay them? advertising.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I will share the most useful free &amp;amp; open source tools that &lt;strong&gt;I&lt;/strong&gt; use in my work &amp;amp; home environment. &lt;strong&gt;The tools can be used in any env/ language/ framework/ project.&lt;/strong&gt; If you are a devops in a large corporation or a freelance developer this article should be a good start.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Probably you know about most of the tools already, hopefully today you’ll hear about a new one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I will skip chat clients like Slack, services such as Stack Overflow, &lt;a href="https://twitter.com/B3aT"&gt;twitter&lt;/a&gt;, &lt;strong&gt;YouTube&lt;/strong&gt; and other &lt;strong&gt;Google&lt;/strong&gt; products. I use most of them, everything in my life starts in a &lt;strong&gt;Spreadsheet&lt;/strong&gt;. &lt;strong&gt;Inbox&lt;/strong&gt; &amp;amp; google &lt;strong&gt;docs&lt;/strong&gt; are awesome for prototyping, ideas, formulas, project docs, working alone or shared across the team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IYznakCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3014/1%2Au3DnSHW7dHD9TvoXI4C6SQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IYznakCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3014/1%2Au3DnSHW7dHD9TvoXI4C6SQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Class A — Productivity+ for devs, ops, QA, IT
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Visual Studio Code&lt;/strong&gt; — &lt;strong&gt;Code&lt;/strong&gt; editor, closer to an IDE than the rest I would say. I used it only for the last few weeks, but it became #1 right away, for me it replaced Atom/Sublime/Notepad. &lt;a href="https://dev.toundefined"&gt;Visual Studio&lt;/a&gt; works with any language and &lt;strong&gt;config files&lt;/strong&gt; (json, xml, ini …). It replaced MonoDevelop for Unity3D, I do TDD in Go, code in Java, C# etc.&lt;/p&gt;

&lt;p&gt;I was very skeptic at first, being a Microsoft product, but I threw everything I had and it handled it perfectly. It just runs fast and across platforms. I will still use my PHPStorm (webstorm) for large projects though (for now). It has a very good learning curve,&lt;a href="https://code.visualstudio.com/docs/getstarted/keybindings#_keymap-extensions"&gt; one of it’s features is the KeyMap&lt;/a&gt;, I use my Intellij keyboard shortcuts in VSCode, how cool is that?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wDbMtBXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2338/1%2Awc1lmPXcecSqT6M0qc_1lQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wDbMtBXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2338/1%2Awc1lmPXcecSqT6M0qc_1lQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trello.com/adriangeorgescu/recommend"&gt;&lt;strong&gt;Trello&lt;/strong&gt;&lt;/a&gt; — Task &lt;strong&gt;list&lt;/strong&gt;, to do list, shopping list, to visit places list, stuff to do with the kids, notepad for ideas, task management for small projects/teams, bug tracker, feature planning, should I go on? &lt;a href="https://trello.com/"&gt;Trello&lt;/a&gt; runs across all platforms and the free tier is good enough. Also it has many &lt;a href="https://trello.com/power-ups"&gt;integrations &amp;amp; plugins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--InBkULed--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2284/1%2AYGnnb4DPrOzxi0zxVmky6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--InBkULed--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2284/1%2AYGnnb4DPrOzxi0zxVmky6g.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getsharex.com/"&gt;&lt;strong&gt;GetShareX&lt;/strong&gt;&lt;/a&gt; — &lt;strong&gt;Screenshot&lt;/strong&gt; and Screecast of your dekstop/window/region. I use it for bug reports, screenshots, examples, record “how to …”, etc. It’s similar to Snagit/Jing but better (is open source). Records video or gif, has scriptable actions like auto upload to imgur after a screenshot and a lot of other features. For &lt;strong&gt;Linux&lt;/strong&gt; I use a mix of &lt;a href="http://shutter-project.org/"&gt;Shutter&lt;/a&gt; and Ubuntu screenshot builtin tools. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2VKUaiP3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2486/1%2ASX7IeD6Sc545R-fm16fN9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2VKUaiP3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2486/1%2ASX7IeD6Sc545R-fm16fN9w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.toggl.com/"&gt;&lt;strong&gt;Toggl&lt;/strong&gt;&lt;/a&gt; — Track your &lt;strong&gt;time&lt;/strong&gt; spent working. Time is a valuable currency, so I keep tracking how I spend it. &lt;a href="https://toggl.com/"&gt;Toggl&lt;/a&gt; has a powerful idle detection (the measured time will be more accurate), browser, desktop and mobile clients. Supports multiple projects and even generates reports (good for freelancers/remote workers). It’s all about calculating the &lt;strong&gt;resources invested in a project vs the gains&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4bcegj6X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2012/1%2Apl1fXb_yiW2f2Izy1FjQFw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4bcegj6X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2012/1%2Apl1fXb_yiW2f2Izy1FjQFw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.codewars.com/r/vWPS5A"&gt;&lt;strong&gt;CodeWars&lt;/strong&gt;.com&lt;/a&gt;—algorithms. If &lt;a href="https://www.topcoder.com/"&gt;TopCoder&lt;/a&gt; is too serious for you, and &lt;a href="https://codecombat.com/"&gt;CodeCombat&lt;/a&gt; too childish, you will love &lt;a href="https://www.codewars.com/"&gt;Codewars&lt;/a&gt;. It is all about keeping your brain in shape. If you are stuck at work doing the same algorithms over and over or fixing legacy code all day you need some good problems that can be solved in a few minutes. Supports multiple levels of difficulty and most programming languages. &lt;strong&gt;It’s all about improving your programming skills&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sourcetreeapp.com/"&gt;&lt;strong&gt;SourceTree&lt;/strong&gt;&lt;/a&gt; — git client. I usually use bash for git commands, but when I need an UI I use SourceTree. It’s cross platform and easy to understand, we used it to teach non-technical team members how to use git. If you are looking for something more simple &amp;amp; friendlier check &lt;a href="https://desktop.github.com/"&gt;GitHub for desktop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage&lt;/strong&gt; — I use &lt;a href="https://bitbucket.org/"&gt;Bitbucket&lt;/a&gt; for free unlimited private git repositories and &lt;a href="https://github.com/"&gt;&lt;strong&gt;github&lt;/strong&gt;&lt;/a&gt; for open source ones and gists &lt;em&gt;(code snippets)&lt;/em&gt;. Dropbox/Google drive for other resources and &lt;a href="http://backblaze.com"&gt;backblaze&lt;/a&gt;to host images/videos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vimium&lt;/strong&gt; - This tool will improve your browsing speed, searching in history/bookmarks, closing tabs, opening links you name it. It follows the Vim mantra, everything done with the keyboard. Works &lt;a href="https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb"&gt;on Chrome&lt;/a&gt; and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/vimium-ff/"&gt;Firefox&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mentions:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://gitlab.com/"&gt;&lt;strong&gt;GitLab&lt;/strong&gt;&lt;/a&gt; - I will soon move to Gitlab and most probably it will replace BitBucket (for me) because of their rich interchangeability and devops features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.interviewbit.com/"&gt;InterviewBit.com&lt;/a&gt; If you want to practice for your coding technical interviews and system design I strongly recommend. It has the best quality of UI,UX,problems, solutions and tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/utime/kpcibgnngaaabebmcabmkocdokepdaki?hl=en"&gt;&lt;strong&gt;UTime&lt;/strong&gt;&lt;/a&gt; — chrome extension to convert UnixTimestamps/dates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.getpostman.com/"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/a&gt; — Web API tester, it’s simple awesome. You can save&amp;amp;share templates and the paid tier supports JS automatic tests!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bash&lt;/strong&gt; for windows — from &lt;a href="https://git-scm.com/downloads"&gt;Git for Windows&lt;/a&gt;, &lt;a href="http://mobaxterm.mobatek.net/"&gt;MobaXterm&lt;/a&gt; (if you connect often to remote servers) or &lt;a href="https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/"&gt;Native Win10 Bash&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.telerik.com/fiddler"&gt;&lt;strong&gt;Fiddler&lt;/strong&gt;&lt;/a&gt;(windows) a very rich proxy for web development. I use it to debug web apps (their requests). &lt;a href="https://www.charlesproxy.com/"&gt;CharlesProxy&lt;/a&gt; is better and works for iOS too but it is &lt;strong&gt;not&lt;/strong&gt; free. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9xxbvLxq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2014/1%2ATQ7-4kLGB8lDl3WxaQ95sQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9xxbvLxq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2014/1%2ATQ7-4kLGB8lDl3WxaQ95sQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Class M — Media
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.gimp.org/"&gt;&lt;strong&gt;Gimp2&lt;/strong&gt;&lt;/a&gt; — It is more than enough for my graphical needs. I use it for photos editing, creating simple &lt;strong&gt;GFX&lt;/strong&gt; for prototypes, resize/transform images and create collages (different sizes, transparency etc). It took me a long while to get used to it (coming from Fireworks), but was worth it. &lt;em&gt;Tip: activate Single Window Mode.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CFYTdH0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2ATPleTzkFSL5z3vp5KpYY9g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CFYTdH0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2ATPleTzkFSL5z3vp5KpYY9g.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.canva.com/"&gt;&lt;strong&gt;Canva&lt;/strong&gt;&lt;/a&gt; — When you need &lt;strong&gt;social media&lt;/strong&gt; posters, banners, collages, headers or logo and you lack a designer, Canva Team will help you. It has a good free tier for small projects and it’s awesome. It has thousands of pre-made templates and photos that you can use freely in your commercial projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UUqF3vQk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2198/1%2AsrzI8epDtN-W7QBYcZUUAQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UUqF3vQk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2198/1%2AsrzI8epDtN-W7QBYcZUUAQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://piktochart.com/"&gt;&lt;strong&gt;Piktochart&lt;/strong&gt;&lt;/a&gt;— One word, infographics. Piktochart knows all about them. It doesn’t have such a great free tier, but it’s an awesome start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nfwZq4ZX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AU7Q2CtxsD99ZPkJbNpAIuw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nfwZq4ZX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AU7Q2CtxsD99ZPkJbNpAIuw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://soundcloud.com/stream"&gt;&lt;strong&gt;SoundCloud&lt;/strong&gt;&lt;/a&gt; —Say it, you cannot work w/o music. If you do not care about latest tracks with half naked women, and you just want to listen to some good old music SoundCloud is all you need. It has even technical podcasts, or science like &lt;a href="https://soundcloud.com/startalk"&gt;StarTalk Radio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--esxSPCZQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2130/1%2AOpRQVHV4NRQ4_dpWaSyGFg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--esxSPCZQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2130/1%2AOpRQVHV4NRQ4_dpWaSyGFg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mentions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://inkscape.org/en/"&gt;&lt;strong&gt;Inkscape&lt;/strong&gt;&lt;/a&gt; — Open source vectorial drawings, it has more features than you would think.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading! I hope that you found something useful around here.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i7FcWsDA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2560/1%2ASWVp-cGi_ipjWWw3SU5ITQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i7FcWsDA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2560/1%2ASWVp-cGi_ipjWWw3SU5ITQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>devtips</category>
    </item>
    <item>
      <title>Golang, it was love at first sight.</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Tue, 18 Sep 2018 13:50:03 +0000</pubDate>
      <link>https://forem.com/bgadrian/golang-it-was-love-at-first-sight-2lah</link>
      <guid>https://forem.com/bgadrian/golang-it-was-love-at-first-sight-2lah</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The article was originally posted on my personal website &lt;a href="https://coder.today/go-go-go-flash-bang-d66f4c42eb7c"&gt;https://coder.today/go-go-go-flash-bang-d66f4c42eb7c&lt;/a&gt;. Meanwhile I have developed a few libraries and small apps in Go, even contributed to Go Tour and I changed some of my opinions, but I will keep this article as it was, I like immutability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  “Go Go Go … flash bang”
&lt;/h2&gt;

&lt;p&gt;When I hear “Go” I always have this &lt;a href="https://soundcloud.com/cruizv/cs-go-go-go"&gt;flash…back&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Usually, when people have free time they do some R&amp;amp;R, but me, being weird and all I like to learn, experiment and play with new things. I have enough new hobbies (earlier this year I learned to pick locks &amp;amp; started to do &lt;a href="https://www.instagram.com/b.g.adrian/"&gt;mobile photography&lt;/a&gt;), so I decided to step up my lost programming mojo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; {you are like me (web or mobile developer, avoided low-level languages and concurrency for any reason) keep reading, &lt;br&gt;
&lt;strong&gt;else&lt;/strong&gt; you already know the truth, skip to the end and share the article 😁.}&lt;/p&gt;

&lt;p&gt;I was away from the Web development for a couple of years, doing Unity3D (C#) &amp;amp; mobile, so naturally I began to catch up with the &lt;strong&gt;latest web trends&lt;/strong&gt;. I made some small projects using &lt;a href="https://www.meteor.com/"&gt;MeteorJS (node +hot code +~mongodb + other steroids)&lt;/a&gt;, &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://d3js.org/"&gt;D3JS&lt;/a&gt;&lt;/strong&gt;. By switching to nodeJS I ditched PHP, working in only 1 language, with shared code, I greatly improved my productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; {you are a JavaScript developer check &lt;a href="https://www.youtube.com/playlist?list=PLEXf82oPg5EPIyYa1dbsLH3i3UcCa3kXp"&gt;this hard-core 2017 playlist&lt;/a&gt;}&lt;/p&gt;

&lt;h2&gt;
  
  
  Go — the programming language
&lt;/h2&gt;

&lt;p&gt;Reading about new architectural styles, &lt;strong&gt;scalability&lt;/strong&gt; &amp;amp; cloud I found a pattern, most of the &lt;a href="https://github.com/golang/go/wiki/GoUsers"&gt;big companies (www backbone)&lt;/a&gt; switched in a way or another to Go.&lt;/p&gt;

&lt;p&gt;When reading about it I found that we had a lot in common (me &amp;amp; Go), it’s a good start for any relationship.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4gJx43Br--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AjwSiKwsOX7ONrx4kUksrJw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4gJx43Br--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AjwSiKwsOX7ONrx4kUksrJw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We are both very &lt;strong&gt;opinionated&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We like to work with JavaScript (building an API is easy or they can be complementary)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We deeply care about developer &lt;strong&gt;productivity&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We like &lt;strong&gt;KISS&lt;/strong&gt;. &lt;a href="https://github.com/SalGnt/cscs#c-2"&gt;Simple is better (vs cpp)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;1 way&lt;/strong&gt; to do it (idioms, code formatting). Having more ways complicates the project, the developer’s brain, team work and compiler’s life.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We suck &lt;a href="http://benchmarksgame.alioth.debian.org/u64q/go.html"&gt;at RegEx&lt;/a&gt; (but the contributors are &lt;a href="https://github.com/golang/go/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue%20is%3Aopen%20regex"&gt;working on it&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We hate &lt;strong&gt;bugs&lt;/strong&gt; (so we enforce coding rules)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We like to &lt;a href="https://tour.golang.org/concurrency/1"&gt;multi task&lt;/a&gt;and work with &lt;strong&gt;big data&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; {you are a Gopher please help me learn faster and review my code:}&lt;br&gt;
&lt;a href="https://github.com/bgadrian/data-structures"&gt;bgadrian/data-structures&lt;br&gt;
*data-structures - Abstract data structures Go packages, built with performance and concurrency in mind to learn Go.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U63PcbvP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AUc-Ey0te8v80aV15zR_Jhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U63PcbvP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AUc-Ey0te8v80aV15zR_Jhg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For me&lt;/strong&gt; Golang has a few more advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It is the perfect mix between &lt;strong&gt;low &amp;amp; high-level&lt;/strong&gt; languages. I want to deliver fast, get things done, so taking out the garbage is not for me. The steep learning curve keeps me away from low-level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has integrated Unit &lt;strong&gt;Tests&lt;/strong&gt; — I was looking for a reason to start practicing TDD.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Community&lt;/strong&gt; — after more than 60 hours of conferences panels and reading forums I can say it is a nice community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I want to be more involved in the &lt;strong&gt;open source&lt;/strong&gt; community, this is my Go sign.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has identity &amp;amp; a cool &lt;strong&gt;mascot&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It creates a &lt;strong&gt;pleasant environment&lt;/strong&gt; (good tools, compiler warnings, idioms etc).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebAssembly&lt;/strong&gt; Learning a compiled language will help to gain an advantage &amp;amp; have fun writing JavaScript and WebAssembly modules in the same time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---rhQ4_Xu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2294/1%2Arkbogy-oxQQwOJiBSan9Vg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---rhQ4_Xu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2294/1%2Arkbogy-oxQQwOJiBSan9Vg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the &lt;a href="https://github.com/ksimka/go-is-not-good"&gt;“anti” Go reasons&lt;/a&gt; I consider them to be “pro” reasons, here are a few examples :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;missing features&lt;/strong&gt; like Exceptions- results in better code, &lt;a href="https://t.co/KRvLFdTqwd"&gt;who wants this chaos on this hands? &lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;“When 2 sides argue more than 15 min they are both wrong.”&lt;/em&gt; In this case wars took more than a decade, so Go being &lt;strong&gt;opinionated&lt;/strong&gt; is a good thing. No more spaces vs tabs, functions vs objects, for vs while … Developers write the same code, compiler can optimize it better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;overloading&lt;/strong&gt; — usually creates too much similar code, and there is no polymorphism, so no much use for it when you code in Go style. Overloading makes “cool looking code”, but is harder to debug, maintain and interpret. I think interfaces are enough (1 function does 1 thing, that can be relate to 1 interface) with explicit conversions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--41gzGFb---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Atqxky0NtFY9AUu02XRHgSw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--41gzGFb---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Atqxky0NtFY9AUu02XRHgSw.jpeg" alt="Actual c++ code"&gt;&lt;/a&gt;&lt;em&gt;Actual c++ code&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;code is &lt;strong&gt;art&lt;/strong&gt;/ has no soul — I think the beauty is not in the source formatting, rather at the system/architecture level, solving difficult problems with simple solutions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;most of the reasons can be easily ignored: they are too subjective, don’t understand the Go paradigms, their minds are stuck in OOP never land or they compare it with other languages like C/C++ (which is not an alternative for) or apply to problems outside of the scope of Go.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; {you want to be a better programmer by practicing &lt;a href="http://www.codewars.com/r/vWPS5A"&gt;katas check CodeWars&lt;/a&gt;}&lt;/p&gt;

&lt;h2&gt;
  
  
  Go learned from 30 yrs of development mistakes
&lt;/h2&gt;

&lt;p&gt;There, I said it! It went back to the roots and returned like a Pheonix, better and with a fresh look.&lt;/p&gt;

&lt;p&gt;I spent too many hours of my life &lt;strong&gt;debugging&lt;/strong&gt; and fixing bugs. I remember a lot of fixes, mistakes and anti-patterns that I fixed along the years, and a lot of them are &lt;a href="https://github.com/golang/go/wiki/CodeReviewComments"&gt;addressed in the compiler rules and coding style of Go&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most programmers are humans, we have feelings and bad days, different experiences and backgrounds, different level of professionalism, technology/env evolves around the code. &lt;strong&gt;Bad code will always exists&lt;/strong&gt;, but if the Language we speak (&lt;strong&gt;Go&lt;/strong&gt;) can fix a lot of issues (even before they exists), shall it be!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; {you want to learn Go check out my first steps:}&lt;br&gt;
&lt;a href="https://coder.today/first-steps-in-learning-golang-d0f3dbb3b6d7"&gt;&lt;strong&gt;First steps in learning Golang&lt;/strong&gt;&lt;br&gt;
*How am I learning Go as my new main language, what resources &amp;amp; techniques am I using?*coder.today&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JWJRgfJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Ape4RBWcHsCYwlw7XTOVlTw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JWJRgfJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Ape4RBWcHsCYwlw7XTOVlTw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Done, rant over, thanks for reading!&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href="https://medium.com/u/3ded8573854e"&gt;ashleymcnamara&lt;/a&gt;, her gopher panel inspired me to start contributing.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>go</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Golang jobs: where can you search for open positions</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Sat, 01 Sep 2018 22:15:42 +0000</pubDate>
      <link>https://forem.com/bgadrian/golang-jobs-where-can-you-search-for-open-positions-1jnb</link>
      <guid>https://forem.com/bgadrian/golang-jobs-where-can-you-search-for-open-positions-1jnb</guid>
      <description>&lt;p&gt;Hello, &lt;/p&gt;

&lt;p&gt;I am currently researching the market and I am gathering a list of bookmarks about Go. I thought it will be nice to share them with the community, and find out about other ones as well. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fih1.redbubble.net%2Fimage.468749784.5220%2Fflat%2C800x800%2C075%2Cf.u2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fih1.redbubble.net%2Fimage.468749784.5220%2Fflat%2C800x800%2C075%2Cf.u2.jpg" alt="gopher"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Spoiler alert, there are not many openings for Go (I estimate around few hundreds around the globe, but mostly in the US), but the numbers are increasing each month.&lt;/p&gt;

&lt;p&gt;The order of resources is random, I included all the websites in which you can find at least 5-10 positions with a clear tag (usually Go doesn't work), and they are not local (only for one country).&lt;/p&gt;

&lt;p&gt;Other problem when searching on general websites (like linkedin) is that you will find many positive-negative openings that wrote &lt;em&gt;".... development experience in one or more languages: Java, Go, ..."&lt;/em&gt;, but the position is definitely not on Go.&lt;/p&gt;

&lt;p&gt;Other issue is that the recruiters do not use proper tags for their openings and the &lt;strong&gt;tag #golang&lt;/strong&gt; is useless. &lt;/p&gt;

&lt;p&gt;Bottom line is that is very hard to scoop the Golang specific positions, the language name and the HR is making it more difficult, and dedicated websites are a blessing for the community.&lt;/p&gt;

&lt;p&gt;Sidenote, here is the &lt;a href="https://github.com/golang/go/wiki/GoUsers" rel="noopener noreferrer"&gt;"official" list of the companies that uses Go&lt;/a&gt;, usually in a small extent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go(lang) dedicated websites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.golangprojects.com/" rel="noopener noreferrer"&gt;golangprojects.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.welovegolang.com/" rel="noopener noreferrer"&gt;welovegolang.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.gopheracademy.com/gophers-slack-community/" rel="noopener noreferrer"&gt;chat- the channel #jobs on Gophers slack community&lt;/a&gt; &lt;br&gt;
&lt;a href="https://golang.cafe/" rel="noopener noreferrer"&gt;golang.cafe&lt;/a&gt;&lt;br&gt;
&lt;a href="https://forum.golangbridge.org/c/jobs" rel="noopener noreferrer"&gt;forum.golangbridge.org - jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://golangjob.xyz/" rel="noopener noreferrer"&gt;golangjob.xyz&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: these websites are not updated so often, check the date and if the position is still available before reading all about it!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Others
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/jobs/developer-jobs-using-golang" rel="noopener noreferrer"&gt;stackoverflow jobs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://angel.co/jobs#find/f!%7B%22keywords%22%3A%5B%22golang%22%5D%7D" rel="noopener noreferrer"&gt;angel list&lt;/a&gt; - startups, you have to be logged in&lt;br&gt;
&lt;a href="https://www.glassdoor.com/Job/golang-developer-jobs-SRCH_KO0,16.htm" rel="noopener noreferrer"&gt;glassdoor&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.indeed.com/q-golang-jobs.html" rel="noopener noreferrer"&gt;indeed&lt;/a&gt;&lt;br&gt;
&lt;a href="https://remoteok.io/remote-golang-jobs" rel="noopener noreferrer"&gt;remoteok.io&lt;/a&gt;&lt;br&gt;
&lt;a href="https://goremote.io/" rel="noopener noreferrer"&gt;goremote.io&lt;/a&gt; remote jobs for all languages&lt;br&gt;
&lt;a href="https://golang.works-hub.com/" rel="noopener noreferrer"&gt;golang.works-hub&lt;/a&gt; ~AI based&lt;br&gt;
&lt;a href="https://fullstackjob.com/jobs/go--developer-jobs" rel="noopener noreferrer"&gt;fullstackjob.com/jobs/go--developer-jobs&lt;/a&gt; multi-language positions&lt;br&gt;
&lt;a href="https://www.cybercoders.com/jobs/golang-jobs/" rel="noopener noreferrer"&gt;cybercoders&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you know more resources please put them in comments, I will try to update the article each week or so with your URLs.&lt;/p&gt;

&lt;p&gt;Thanks! See you in the #cloud!&lt;/p&gt;

&lt;p&gt;Last update: 19 jul 2019&lt;/p&gt;

</description>
      <category>go</category>
      <category>jobs</category>
      <category>career</category>
      <category>hr</category>
    </item>
    <item>
      <title>What books did you used as a display/laptop stand?</title>
      <dc:creator>Adrian B.G.</dc:creator>
      <pubDate>Sun, 08 Jul 2018 13:25:12 +0000</pubDate>
      <link>https://forem.com/bgadrian/what-books-did-you-used-as-a-displaylaptop-stand-3k43</link>
      <guid>https://forem.com/bgadrian/what-books-did-you-used-as-a-displaylaptop-stand-3k43</guid>
      <description>&lt;p&gt;I couldn't find a real picture with my old setup, but I've used 2 large C++ books, the &lt;strong&gt;Bjarne Stroustrup&lt;/strong&gt; "bible" and one other that had 1000+ pages.&lt;/p&gt;

&lt;p&gt;What books did you used? It's ok, you can come clean now, it will be our little secret.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Firia093kp90vvrvxvmtm.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Firia093kp90vvrvxvmtm.jpeg" alt="pic"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>office</category>
    </item>
  </channel>
</rss>
