<?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: Ilja Nevolin</title>
    <description>The latest articles on Forem by Ilja Nevolin (@codr).</description>
    <link>https://forem.com/codr</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%2F375726%2Fafc6910d-df6c-476b-9ac8-95057fbace0a.jpg</url>
      <title>Forem: Ilja Nevolin</title>
      <link>https://forem.com/codr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codr"/>
    <language>en</language>
    <item>
      <title>A cli tool to be more organized and productive in 2026</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sun, 01 Feb 2026 19:12:04 +0000</pubDate>
      <link>https://forem.com/codr/use-in-cli-to-stay-organized-12fe</link>
      <guid>https://forem.com/codr/use-in-cli-to-stay-organized-12fe</guid>
      <description>&lt;p&gt;We all "love" microservices, allegedly. But you know what isn't fun? Realizing you need to bump a dependency, run a build, git pull and create PRs across 15 different repositories at the same time.&lt;/p&gt;

&lt;p&gt;You usually have two options (if you don't want to use AI agents):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The "Tab Hoarder" Strategy Manually open 15 terminal tabs, cd into each one, run the command, and pray you didn't miss one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The "Unix Wizard" Strategy You try to construct a one-liner that iterates over directories. You start typing:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-maxdepth&lt;/span&gt; 1 &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-exec&lt;/span&gt; sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'cd "{}" &amp;amp;&amp;amp; git pull'&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works, but it's painfully slow because it runs serially (one at a time). So you switch to xargs to run it in parallel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;/ | xargs &lt;span class="nt"&gt;-P&lt;/span&gt; 4 &lt;span class="nt"&gt;-I&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"cd {} &amp;amp;&amp;amp; pnpm update"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have a problem. xargs (by default) breaks on directory names with spaces. To fix it, you need to add -print0 to find and -0 to xargs, and suddenly your "quick one-liner" is 80 characters long and unreadable.&lt;/p&gt;

&lt;p&gt;Enter in-cli 🚀 &lt;a href="https://github.com/inevolin/in-cli" rel="noopener noreferrer"&gt;https://github.com/inevolin/in-cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] &lt;span class="o"&gt;[&lt;/span&gt;DIRECTORIES...] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; COMMAND...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I got tired of typing those boilerplate loops. I wanted a tool that does one thing well: runs a command in every directory, fast. So I built in-cli. It’s a zero-dependency CLI (pure bash) that acts as a force multiplier for your shell.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually works
&lt;/h2&gt;

&lt;p&gt;Instead of wrestling with pipes and flags, you just tell it what to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1: The Morning Routine&lt;/strong&gt; You get to work and need to update all 20 repos in your ~/work folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Updates every repo in ~/work/ directory&lt;/span&gt;
&lt;span class="k"&gt;in&lt;/span&gt; ~/work/&lt;span class="k"&gt;*&lt;/span&gt; git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Scenario 2: The "Critical Fix" Deployment&lt;/strong&gt; You need to trigger a build script across all your services right now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run 'make build' in parallel across all subdirectories&lt;/span&gt;
&lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;-P&lt;/span&gt; 8 ~/work/&lt;span class="k"&gt;*&lt;/span&gt; make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Scenario 3: Dependency Hell&lt;/strong&gt; Need to update lodash in every service because of a CVE?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;in&lt;/span&gt; ~/work/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="s1"&gt;'pnpm update lodash &amp;amp;&amp;amp; git commit -am "updating lodash" &amp;amp;&amp;amp; git push'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll find +50 other real-world scenarios in the &lt;a href="https://github.com/inevolin/in-cli/blob/main/EXAMPLES.md" rel="noopener noreferrer"&gt;EXAMPLES.md&lt;/a&gt; file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use this?
&lt;/h2&gt;

&lt;p&gt;Stop wasting time on tooling boilerplate. If you're managing a monorepo or a folder full of microservices, stop writing throwaway scripts to manage them. Check it out on GitHub, and let me know if it saves you a few keystrokes (and your sanity).&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>linux</category>
    </item>
    <item>
      <title>Speech-to-Text Discord bot written in Go</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sat, 27 Jan 2024 22:42:16 +0000</pubDate>
      <link>https://forem.com/codr/speech-to-text-discord-bot-written-in-go-eih</link>
      <guid>https://forem.com/codr/speech-to-text-discord-bot-written-in-go-eih</guid>
      <description>&lt;p&gt;As part of my personal journey to learn Go, I've decided to rewrite one of my open source projects in GoLang.&lt;/p&gt;

&lt;p&gt;The project is a standalone (offline) speech-to-text bot for Discord. Basically it transcribes everything you say in a voice channel. This is useful if you want to have custom voice commands (eg. while gaming), or enhance the communication experience for hearing impaired/deaf people.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/inevolin/DiscordEarsGo" rel="noopener noreferrer"&gt;https://github.com/inevolin/DiscordEarsGo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project makes use of the Vosk library, which does not work well on Mac OS (M1), so by default it is designed to only work on Linux x86 systems (since you would likely be hosting it on Linux). But the great thing is that Vosk works offline, open source and comes with a ton of models and languages (english, german, french, chinese, ...) for download &lt;a href="https://alphacephei.com/vosk/models" rel="noopener noreferrer"&gt;https://alphacephei.com/vosk/models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the annoying things was also to decode Opus packets to PCM, it requires opus libraries to be installed. The same is true for the NodeJS version (which now requires ffmpeg to be installed). It would be nice if there was a tiny library/snippet that does this (not external library).&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>go</category>
      <category>discord</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Work on Open Source projects to stand out in 2024</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Tue, 02 Jan 2024 14:49:51 +0000</pubDate>
      <link>https://forem.com/codr/work-on-open-source-projects-to-stand-out-in-2024-3men</link>
      <guid>https://forem.com/codr/work-on-open-source-projects-to-stand-out-in-2024-3men</guid>
      <description>&lt;p&gt;Happy new year everyone!&lt;/p&gt;

&lt;p&gt;I thought of sharing something cool and fun with my fellow coders. A few years ago I created a speech-to-text bot for Discord,, initially designed to control my own music bot (at the time), but then people started using it to communicate better with their deaf gaming friends in real-time.&lt;/p&gt;

&lt;p&gt;This is the project: &lt;a href="https://github.com/inevolin/DiscordEarsBot" rel="noopener noreferrer"&gt;https://github.com/inevolin/DiscordEarsBot&lt;/a&gt; (the music bot is in another repo which needs a big update). The STT methods include offline and online APIs, so you get to choose the quality/performance you want. But with the rise in AI and ML jobs, this can serve as a great framework to build projects to stand out in your interviews:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use this technology in another tool (Slack, Zoom, phone, browser, ...)&lt;/li&gt;
&lt;li&gt;Use this technology to build voice-based games (maybe for handicapped kids)&lt;/li&gt;
&lt;li&gt;Improve the STT results by adding another ML model to correct the text&lt;/li&gt;
&lt;li&gt;Create a fun bot that "talks back" or tells jokes based on the conversation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to collaborate on a project, post in the comments below and match up with other people!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The dark truth behind Cryptocurrencies</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sun, 20 Nov 2022 18:05:52 +0000</pubDate>
      <link>https://forem.com/codr/the-dark-truth-behind-cryptocurrencies-1ef7</link>
      <guid>https://forem.com/codr/the-dark-truth-behind-cryptocurrencies-1ef7</guid>
      <description>&lt;p&gt;&lt;strong&gt;The environmental impact of blockchains&lt;/strong&gt; and cryptocurrencies cannot be overlooked. In particular Proof-of-Work systems such as Bitcoin have a huge (understated) energy footprint. In conventional cryptocurrency systems, tokens are awarded to “miners” for successfully mining blocks on the blockchain. The core problem is that mining consumes incomprehensible amounts of electrical energy.&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%2F7b4gdf25ip6lgv93pb6g.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%2F7b4gdf25ip6lgv93pb6g.png" alt="Source: https://www.bbc.com/news/science-environment-56215787" width="800" height="687"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How bad is it?&lt;/strong&gt;&lt;br&gt;
According to several studies (&lt;a href="https://www.statista.com/statistics/881541/bitcoin-energy-consumption-transaction-comparison-visa/" rel="noopener noreferrer"&gt;link&lt;/a&gt;), a single Bitcoin transaction requires 2,180kWh, with this amount of energy you can execute over 1.4 million Visa transactions, or fully charge 29 Tesla cars (Model 3, 75kWh). Another research reveals Bitcoin system alone consumes half of the energy of the banking industry (&lt;a href="https://www.nasdaq.com/articles/research%3A-bitcoin-consumes-less-than-half-the-energy-of-the-banking-or-gold-industries" rel="noopener noreferrer"&gt;source&lt;/a&gt;). Pretty bad is an understatement...&lt;/p&gt;

&lt;p&gt;If you ask any expert, Bitcoins are a &lt;strong&gt;dramatic waste of natural resources&lt;/strong&gt;. Even if Bitcoin is fully run on renewable energy, its benefits will never outweigh the energy consumption (mind the natural resources, maintenance &amp;amp; production, material waste from solar panels, wind turbines, etc). You may also have seen articles trying to debunk Bitcoin fuds, but if you conduct some research, many of those authors are merely crypto influencers, acting as Hollywood scientists (&lt;a href="https://endthefud.org/" rel="noopener noreferrer"&gt;examples&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  How can we solve this?
&lt;/h2&gt;

&lt;p&gt;I’m building the Carbon3 cryptocurrency that does not use a blockchain (requires no mining). It has better security and privacy wallet aspects than existing cryptocurrencies, stimulates good capitalistic behavior and enforces eco-friendly consumerism.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About me&lt;/strong&gt;&lt;br&gt;
I work in the web3.0 industry with a particular stake in the decentralized-identity space. Whether we like it or not, blockchain technologies (in particular PoW ~ Bitcoin) are wasting precious energy resources from our planet 🌎, but fail to universally solve the centralized monetary issues 💰. The big institutions still dominate the financial sector, and are dominating the crypto industry as well. And with enforced Travel Rule worldwide, crypto loses its face as an anonymous system. &lt;/p&gt;

&lt;p&gt;Get in touch to learn more &lt;a href="https://www.linkedin.com/in/iljanevolin/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/iljanevolin/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>blockchain</category>
      <category>bitcoin</category>
      <category>ethereum</category>
    </item>
    <item>
      <title>My First Month of Running an API-first Startup</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Tue, 06 Apr 2021 21:51:17 +0000</pubDate>
      <link>https://forem.com/codr/my-first-month-of-running-an-api-first-startup-3oj7</link>
      <guid>https://forem.com/codr/my-first-month-of-running-an-api-first-startup-3oj7</guid>
      <description>&lt;p&gt;Early March I was hired to run and grow &lt;a href="https://www.spurwing.io/" rel="noopener noreferrer"&gt;Spurwing&lt;/a&gt;. I am in charge of the business development, sales and marketing aspects, and co-responsible for several engineering projects. In this post I'll share my personal insights, tips and tricks from my first month at an early-stage Startup company.&lt;/p&gt;

&lt;h2&gt;
  
  
  The company
&lt;/h2&gt;

&lt;p&gt;Our core product is the &lt;strong&gt;Appointment Scheduling API&lt;/strong&gt;. Our primary clients are engineering teams and managers. The API allows developers to innovate quicker, build cheaper and scale easier any kind of time sensitive process.&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%2Fwb08zq3mm35baedfpf7f.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%2Fwb08zq3mm35baedfpf7f.png" alt="appointment scheduling demo" width="773" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most common use cases we focus on are &lt;strong&gt;Time Management Solutions&lt;/strong&gt;. The most simple use cases are custom booking and scheduling widgets. The more complex solutions entail enterprise calendar management, remote team collaboration tools and supply chain management. Our products fit in any industry and can be used by most roles.&lt;/p&gt;

&lt;p&gt;We are not directly competing with products like Calendly. Our mission is providing engineering resources and tools to development teams to solve problems quicker, easier and cheaper. &lt;/p&gt;

&lt;p&gt;Spurwing is actually a spin-off product developed for &lt;a href="https://www.gethealthie.com/" rel="noopener noreferrer"&gt;Healthie Inc.&lt;/a&gt; where its technology is used to schedule and manage millions of annual bookings and events.&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%2Far3f9u837ky2hcew6a4x.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%2Far3f9u837ky2hcew6a4x.png" alt="calendar management dashboard" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  First week
&lt;/h2&gt;

&lt;p&gt;I have been working in software engineering, product and business development for over 10 years. So it was a fairly easy and efficient on-boarding process for me. Some of you may relate, but most of the things we do at Spurwing, and the challenges we face, I already faced before. I have a pretty solid idea of how to tackle most challenges and what it takes to execute.&lt;/p&gt;

&lt;p&gt;This being said, the first week I spent a lot of time communicating with the directors on our vision and strategy for Spurwing. The goal we set is building a large, free and &lt;a href="https://github.com/Spurwing/" rel="noopener noreferrer"&gt;open-source Marketplace&lt;/a&gt;. This marketplace will contain a ton of resources and tools for engineering teams and developers. These include API libraries, widgets, chat bots, management dashboards and many integrations with 3rd party providers.&lt;/p&gt;

&lt;p&gt;Giving away all these resources for free provides us with great marketing opportunities and a big advantage over the competition as well.&lt;/p&gt;

&lt;p&gt;Once we had our goal clearly defined, it was time to execute. I started building the libraries for the API in several programming languages: Python, NodeJS, JavaScript/Ajax and we are working on Java, C++ and C# as well. Thanks to these libraries we can now easily and quickly build new tools and platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Second week
&lt;/h2&gt;

&lt;p&gt;Research is an important activity I do on a daily basis. Specifically I research and note down all types of projects and solutions for us to work on. &lt;/p&gt;

&lt;p&gt;I started building the most crucial ones first: 1:1 appointment scheduling widgets for websites, calendar links and the like.&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%2Fbgsiie758revo4rfijne.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%2Fbgsiie758revo4rfijne.png" alt="appointment scheduling tool" width="579" height="688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Third week
&lt;/h2&gt;

&lt;p&gt;I spent that week mostly on research, prospecting and talking to potential clients. Most communication happens on LinkedIn or email. LinkedIn is great, but it's not easy to get people to talk to you. Most senior engineers and managers have no time to chat with randoms. It's all about finding the ones that are active and engage with them.&lt;/p&gt;

&lt;p&gt;A quite popular solution we built that week was a Facebook Messenger Chat Bot with booking / scheduling capabilities:&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%2Fcjb8cpsnvbyc3lrm8c16.gif" 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%2Fcjb8cpsnvbyc3lrm8c16.gif" alt="chat bot for scheduling demo" width="295" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are still in the process of improving this chat bot, enhancing the user experience and experimenting with new features. Aside from that we have several more chat bot integrations in the pipeline: Discord, Slack, WhatsApp, Skype, Intercom, Amazon Lex, Google Chat and more.&lt;/p&gt;

&lt;p&gt;We started building a CI/CD pipeline for all our libraries, widgets and tools on the marketplace. Over the years I became very proactive of Test Driven Development and the value that CI/CD pipelines provide to engineering &amp;amp; QA teams. These days I no longer build products without having some decent automated testing (and deployment) included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fourth week
&lt;/h2&gt;

&lt;p&gt;Mostly prospecting, building marketing content and researching product ideas. In addition to that we built a simple scheduling too for international teams across different time zones:&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%2Fysw09vvo7u5h89e06ela.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%2Fysw09vvo7u5h89e06ela.png" alt="appointment scheduling for teams" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tools like these allow us to save precious time and be more productive internally. Most of our employees and partners are located at different time zones, thus setting up meetings can sometimes be a hassle. This tool allows all participants to submit their availability for a certain date range. The organizer of the event can then view a strict overlap of all the submissions and choose a time slot that works for all. It's a quite simple and basic implementation but provides a huge value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You may wonder how the heck we get so much done in just under a month. It's all about great management mixed with experience &amp;amp; expertise.&lt;/p&gt;

&lt;p&gt;We use Slack / Discord to easily and quickly communicate with all our business and engineering teams. We spend very little time on email or phone communication. We only have one dedicated video chat call per week to catch up. As you can see, we try to minimize and reduce any unnecessary bottlenecks. This allows us to be extremely productive.&lt;/p&gt;

&lt;p&gt;If you have any specific questions, post them down below!&lt;/p&gt;

&lt;h3&gt;
  
  
  Useful links
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.to/spurwing"&gt;Spurwing blog on DEV&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Spurwing/" rel="noopener noreferrer"&gt;Open-Source Marketplace&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.slideshare.net/IljaNevolin/time-management-tools-appointment-scheduling-software-and-booking-solutions-for-business-teams" rel="noopener noreferrer"&gt;Brochure&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  About me
&lt;/h3&gt;

&lt;p&gt;I'm a modest Software engineer with +10yrs of experience in building software for web, desktop and some Android stuff. Multi-Startup founder and product developer. Feel free to connect: &lt;a href="https://www.linkedin.com/in/iljanevolin/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/iljanevolin/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ciao!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Do you even Refactor? 003</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sun, 14 Feb 2021 22:34:19 +0000</pubDate>
      <link>https://forem.com/codr/do-you-even-refactor-003-3emc</link>
      <guid>https://forem.com/codr/do-you-even-refactor-003-3emc</guid>
      <description>&lt;p&gt;Code refactoring is crucial but often overlooked. It can improve the design and performance of existing code.&lt;/p&gt;

&lt;p&gt;The Python code below takes about 14 seconds to complete. Refactor the &lt;code&gt;getData&lt;/code&gt; function to make it run in less than 10 seconds. Post your answer in the comments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;timed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;Tstart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  
    &lt;span class="n"&gt;Tend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;Tdt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tend&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Tstart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tdt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt;

&lt;span class="nd"&gt;@timed&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;len:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sum:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>python</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Do you even Refactor? 002</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sat, 13 Feb 2021 16:29:43 +0000</pubDate>
      <link>https://forem.com/codr/do-you-even-refactor-002-4i9h</link>
      <guid>https://forem.com/codr/do-you-even-refactor-002-4i9h</guid>
      <description>&lt;p&gt;Code refactoring is crucial but often overlooked. It can improve the design and performance of existing code.&lt;/p&gt;

&lt;p&gt;The Python code below takes about 17 seconds to complete. Refactor the &lt;code&gt;getData&lt;/code&gt; function to make it run in less than 5 seconds. Post your answer in the comments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;timed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;Tstart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  
    &lt;span class="n"&gt;Tend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;Tdt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tend&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Tstart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tdt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt;

&lt;span class="nd"&gt;@timed&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;len:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sum:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>python</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Do you even Refactor? 001</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sat, 13 Feb 2021 12:16:51 +0000</pubDate>
      <link>https://forem.com/codr/do-you-even-refactor-001-2ed3</link>
      <guid>https://forem.com/codr/do-you-even-refactor-001-2ed3</guid>
      <description>&lt;p&gt;Code refactoring is crucial but often overlooked. It can improve the design and performance of existing code.&lt;/p&gt;

&lt;p&gt;The Python code below takes about 12 seconds to execute. Refactor the &lt;code&gt;getData&lt;/code&gt; function to make it run in less than 1 second. Post your answer in the comments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;timed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;Tstart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  
    &lt;span class="n"&gt;Tend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;Tdt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tend&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Tstart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tdt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt;

&lt;span class="nd"&gt;@timed&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>python</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>MultiVariate Anomaly Detection</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sun, 07 Feb 2021 16:21:37 +0000</pubDate>
      <link>https://forem.com/codr/multivariate-anomaly-detection-51pi</link>
      <guid>https://forem.com/codr/multivariate-anomaly-detection-51pi</guid>
      <description>&lt;p&gt;Discovering anomalies in complex multivariate and multidimensional data can be quite a challenge. Visualizing these anomalies can be even trickier, especially if you want to keep it simple without having to go over thousands of charts to filter out issues from false positives and noise. Using statistical methods we can aggregate complex data to be displayed on a single heatmap. By hovering over specific cells, we can quickly display the individual data on charts.&lt;/p&gt;

&lt;p&gt;Heatmap: &lt;a href="https://healzer.github.io/Industrial-Data-Analysis/hmap1.html?testdays=3&amp;amp;testlike=1" rel="noopener noreferrer"&gt;https://healzer.github.io/Industrial-Data-Analysis/hmap1.html?testdays=3&amp;amp;testlike=1&lt;/a&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%2Fi%2Fczvpw2dyy5dxk8itnt3r.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%2Fi%2Fczvpw2dyy5dxk8itnt3r.png" alt="Alt Text" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This system was first implemented for a high-tech enterprise's CI/CD pipeline. It is being used by R&amp;amp;D, Q&amp;amp;A and management to keep track of all processes and variables throughout the development lifecycle. Any anomalies can easily be identified and pinpointed as soon as they appear on the heatmap. Anomalous decreases (green) indicate performance improvements (time, memory and parameter reductions), while degradations (red) imply performance issues.&lt;/p&gt;

&lt;p&gt;Very subtle improvements or degradations are tricky to identify and detect, but overall the system has a very high accuracy. The best use of this system is for data that should remain static over time, it may not work very well if you have alternating/seasonal data. Separate charts can be built for mapping GitHub commits to each individual data point, allowing the team to instantly pinpoint which code change caused which performance change.&lt;/p&gt;

&lt;p&gt;The demo URL can contains three parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;testdays&lt;/code&gt;: how many days from the data should be used as test data (versus baseline data)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;testlike&lt;/code&gt;: filter data whose test value should contain a certain string (these are the Y-axis values)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;annotate&lt;/code&gt;: (0 or 1) primarily for debugging reasons, indicating whether to show Z-values on each cell (may slow down your browser!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This code may not be directly usable for your purposes, but the general idea of using statistical functions like MADe and Z-values to detect anomalies in datasets may be very useful in CI/CD pipelines but also many industrial processes.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/healzer/Industrial-Data-Analysis" rel="noopener noreferrer"&gt;https://github.com/healzer/Industrial-Data-Analysis&lt;/a&gt;&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Multipurpose tables as CRM and to-do lists</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sat, 06 Feb 2021 12:32:50 +0000</pubDate>
      <link>https://forem.com/codr/multipurpose-tables-as-crm-and-to-do-lists-gem</link>
      <guid>https://forem.com/codr/multipurpose-tables-as-crm-and-to-do-lists-gem</guid>
      <description>&lt;p&gt;Most of you know CRM by the many advanced tools out there such as Salesforce, Capterra and Hubspot. But millions of small companies still use Excel/Word/Files/Directories to manage their accounts, invoices and projects. I have met very few individual contractors who use productivity tools/apps, even simple things like notepad apps to record customer requests and issues. Even fewer apply basic CRM practices to stay in touch with their customers, such as keeping their contact details and/or sending out promotional emails.&lt;/p&gt;

&lt;p&gt;I understand that for many businesses it may seem like a lot of overhead with little or no immediate value. But some of these do wish to grow and expand their operations, thus seek low-cost solutions.&lt;/p&gt;

&lt;p&gt;Since I started the &lt;a href="https://github.com/healzer/PyCRM" rel="noopener noreferrer"&gt;PyCRM&lt;/a&gt; project I have been thinking of very simple yet effective ways of doing CRM. Since every business is different, everyone wants a slightly different interface, customization is key.&lt;/p&gt;

&lt;p&gt;I remembered that there are many Javascript libraries that provide customizable tables/forms. In addition many of these use very simple data structures which can easily be serialized as JSON and stored as a file without using a complex (No)SQL database.&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%2Fi%2F4u41lhro1l9tb341ccko.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%2Fi%2F4u41lhro1l9tb341ccko.png" alt="Alt Text" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the latest addition to our &lt;a href="https://github.com/healzer/PyCRM" rel="noopener noreferrer"&gt;PyCRM&lt;/a&gt; project, we can use the JS Tabulator library which provides this functionality. You can easily customize the columns, fields and hundreds of other features.&lt;/p&gt;

&lt;p&gt;Since it's a SaaS page, it works pretty well on mobile devices. You can use it anywhere as long as you have an internet connection. The save button saves any changes on the server. &lt;/p&gt;

&lt;p&gt;This is a very basic implementation, so be very careful when it is used by multiple people at once. When multiple people save then only ones' version will be stored, the other changes will be overridden and lost.&lt;/p&gt;

&lt;p&gt;An improved implementation would be to commit individual fields instead of the entire dataset. But also keep any changes automatically synced over all active users. Once again this isn't difficult to implement but depends on whether you need it or not.&lt;/p&gt;

&lt;p&gt;Apart from using this as a CRM, you can turn this into a simple project management tool, or a to-do list or a sales tracking tool, etc. Enjoy!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Mr. Meow meow 😹</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sat, 30 Jan 2021 20:03:47 +0000</pubDate>
      <link>https://forem.com/codr/meow-synthesizer-3b0i</link>
      <guid>https://forem.com/codr/meow-synthesizer-3b0i</guid>
      <description>&lt;p&gt;Past few weeks I was obsessed with the song &lt;a href="https://www.youtube.com/watch?v=CX45pYvxDiA" rel="noopener noreferrer"&gt;Mr Sandman&lt;/a&gt;. And been thinking of making a cat edition of this beat.&lt;/p&gt;

&lt;p&gt;Since I couldn't find anything decent on YouTube, it was time to have a productive Saturday!&lt;/p&gt;

&lt;p&gt;Video Demo 1: &lt;a href="https://www.youtube.com/watch?v=y7hKNtucQbg" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=y7hKNtucQbg&lt;/a&gt;&lt;br&gt;
Video Demo 2: &lt;a href="https://www.youtube.com/watch?v=Eu4TOEb1xII" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=Eu4TOEb1xII&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Demo: &lt;a href="https://nevolin.be/meow/" rel="noopener noreferrer"&gt;https://nevolin.be/meow/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/healzer/MeowSynth" rel="noopener noreferrer"&gt;https://github.com/healzer/MeowSynth&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This code may not work on a mobile device (not sure why).&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;p&gt;I'll briefly explain how I made this.&lt;/p&gt;

&lt;p&gt;I used &lt;a href="https://tonejs.github.io/" rel="noopener noreferrer"&gt;ToneJS&lt;/a&gt; which allows us to sample and synthesize mp3 sounds and use them as separate notes (it does some manipulations behind the scenes).&lt;/p&gt;

&lt;p&gt;Next we need the piano notes of this song, so I Googled for a MIDI file and used &lt;a href="https://tonejs.github.io/Midi/" rel="noopener noreferrer"&gt;ToneJS MIDI to JSON tool&lt;/a&gt; to get the bass and treble notes as arrays. &lt;/p&gt;

&lt;p&gt;Those arrays can be merged and used as input for the Sampler :)&lt;/p&gt;

&lt;p&gt;There is a lot of tuning possible, getting better meow sounds and/or more different samples. You can observe this in the code. It's just a few lines that you can play with.&lt;/p&gt;

&lt;p&gt;Happy meow! Who can make us a dog, sheep and horse edition?&lt;/p&gt;

</description>
      <category>music</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Celebrating 1000 DEV followers</title>
      <dc:creator>Ilja Nevolin</dc:creator>
      <pubDate>Sun, 24 Jan 2021 15:28:22 +0000</pubDate>
      <link>https://forem.com/codr/celebrating-1000-dev-followers-2jg2</link>
      <guid>https://forem.com/codr/celebrating-1000-dev-followers-2jg2</guid>
      <description>&lt;p&gt;Thank you all for supporting us! ❤️ :))&lt;/p&gt;

&lt;p&gt;I would like to use this achievement as a start of something new.&lt;br&gt;
To celebrate our progress I am going to organize &lt;strong&gt;interviews with you&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;These interviews will introduce many of our members, by learning more about their experiences, work, dreams and ambitions. You will be allowed to promote some of your projects/websites, but we would also ask you to review &lt;a href="https://nevolin.be/codr/" rel="noopener noreferrer"&gt;Codr&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's do this
&lt;/h3&gt;

&lt;p&gt;Shoot me an email at &lt;a href="mailto:ilja.nevolin@gmail.com"&gt;ilja.nevolin@gmail.com&lt;/a&gt; with more details about yourself, include your portfolio, resume, linkedin if possible. Alternatively reach out to me on Discord &lt;code&gt;X0X0#3601&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Because it matters
&lt;/h3&gt;

&lt;p&gt;I hope these interviews will encourage more people to appreciate and respect the work we do. But also provide insights from people across the world. Even if you're not a developer or just starting out, you are more than welcome to share your story. It's a great opportunity to make new friends, colleagues or partners!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>portfolio</category>
    </item>
  </channel>
</rss>
