<?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: David B.</title>
    <description>The latest articles on Forem by David B. (@dbumbeishvili).</description>
    <link>https://forem.com/dbumbeishvili</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%2F331777%2F8cb73c70-d4e6-4977-872d-816026053f83.png</url>
      <title>Forem: David B.</title>
      <link>https://forem.com/dbumbeishvili</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dbumbeishvili"/>
    <language>en</language>
    <item>
      <title>Introducing a new version of org-chart lib</title>
      <dc:creator>David B.</dc:creator>
      <pubDate>Sat, 14 Aug 2021 17:52:05 +0000</pubDate>
      <link>https://forem.com/dbumbeishvili/introducing-a-new-org-chart-1o7</link>
      <guid>https://forem.com/dbumbeishvili/introducing-a-new-org-chart-1o7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z6AKfA54--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5q4rr95akbzwzzaoxsyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z6AKfA54--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5q4rr95akbzwzzaoxsyq.png" alt="Org Chart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bumbeishvili/org-chart"&gt;Org chart&lt;/a&gt; was first released 3 years ago after one of my clients let me open-source the code. After that many people began using it and feedback started coming in.&lt;/p&gt;

&lt;p&gt;Apart from bug reports, there were some very interesting and useful features, which would be really great additions to this library.&lt;/p&gt;

&lt;p&gt;Unfortunately, it’s hard to find time to work on your own open-source projects for free, when you are also working to provide for your family, pay substantial mortgage loans e.t.c.&lt;/p&gt;

&lt;p&gt;The way I see it, the only sustainable solution is to start making money with your open-source projects.&lt;/p&gt;

&lt;p&gt;Fortunately for me and for the project, some of the requested features were very important for one of my clients and they agreed to pay for its development.&lt;/p&gt;

&lt;p&gt;Also, I have to mention and appreciate the people, who made &lt;a href="https://ko-fi.com/bumbeishvili"&gt;donations&lt;/a&gt;, for which I am very grateful.&lt;/p&gt;

&lt;p&gt;So, the work started 1.5 months ago and now it’s nearly finished. I want to highlight new features which will land on the org chart.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Improved algorithm
&lt;/h2&gt;

&lt;p&gt;Org chart will use d3-flextree, which offers much more customization opportunities, than the standard tree algorithm&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Programmatic control
&lt;/h2&gt;

&lt;p&gt;Now users can directly pass the function, which will generate each node content.&lt;/p&gt;

&lt;p&gt;It will receive the d3 node as an argument, which means you not only directly have access to original data, but you also can take advantage of all d3 helper functions, like accessing parents, depth, width, and the height of node, getting descendants and accessors, looping over children via DFS or BFS e.t.c.&lt;/p&gt;

&lt;p&gt;Apart from that, several helper props are added to the data (_expanded, ._centered,_totalSubordinates,_directSubordinates ), which will allow you to conditionally style the node&lt;/p&gt;

&lt;p&gt;Here is a high-level overview of the common method signatures&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aOxuqNqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/97o4kai0c66ip95rhmuq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aOxuqNqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/97o4kai0c66ip95rhmuq.png" alt="Docs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved layout
&lt;/h2&gt;

&lt;p&gt;Now users will be able to switch between compact or standard tree layouts and they will also be able to choose 4 different directions (left, top, bottom, right)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rFwxwKtd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2w25fen7s39yvi598275.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rFwxwKtd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2w25fen7s39yvi598275.gif" alt="Layout"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved UX features
&lt;/h2&gt;

&lt;p&gt;Now you have the possibility to programmatically fit the chart to the screen, center, and highlight any node, and request a full-screen view. You also can zoom in and out programmatically (as well as manually).&lt;/p&gt;

&lt;p&gt;In the new version, by default, the active node and branch will get centered, which is a huge win for mobile. It reduces the time for tree exploration drastically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5clmLHK9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzyia92xn19bl65c89pn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5clmLHK9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzyia92xn19bl65c89pn.gif" alt="Center"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New features
&lt;/h2&gt;

&lt;p&gt;From now on, you can specify additional connections between any two nodes&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hU9kuZ5A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p8sn658ovgm76joqn6f8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hU9kuZ5A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p8sn658ovgm76joqn6f8.png" alt="Connection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Exporting
&lt;/h2&gt;

&lt;p&gt;In the new version, you have the ability to export images in PNG or SVG format. You can pass a callback function to receive the base64 string back, which can be used to generate PDF (&lt;a href="https://stackblitz.com/edit/web-platform-o5t1ha"&gt;Check how it is done here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--70EBmcF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fa8uizyldu267n6uic3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--70EBmcF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fa8uizyldu267n6uic3f.png" alt="Export"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New examples
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/bumbeishvili/org-chart#jump-to-examples"&gt;Several new examples&lt;/a&gt; were created for you to reuse. They are featuring different designs, layouts, and approaches of how to customize the default node view.&lt;/p&gt;

&lt;p&gt;One of the examples shows how to achieve a similar view as in the previous version using the previous data format&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BcYeJTye--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eve9ot6bm6wym6laodu1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BcYeJTye--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eve9ot6bm6wym6laodu1.gif" alt="Examples"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrations
&lt;/h2&gt;

&lt;p&gt;The updated version fixes some bugs from the previous version. All 3 major library/framework integrations are available. The new version imports only necessary parts from the d3 library, which should provide some optimizations as well.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/d3-org-chart-angular-integration-halhxr"&gt;Org Chart — Angular Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/d3-org-chart-react-integration-hooks"&gt;Org Chart — React Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/d3-org-chart-vue-integration-su3d6r"&gt;Org Chart — Vue integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need an org chart in your project, give it a try. I’d love to hear your honest feedback.&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;/p&gt;

</description>
      <category>orgchart</category>
      <category>organization</category>
      <category>hierarchy</category>
      <category>lib</category>
    </item>
    <item>
      <title>Github copilot - thoughts after actually trying it</title>
      <dc:creator>David B.</dc:creator>
      <pubDate>Sat, 03 Jul 2021 09:08:07 +0000</pubDate>
      <link>https://forem.com/dbumbeishvili/github-copilot-thoughts-after-actually-trying-it-35nj</link>
      <guid>https://forem.com/dbumbeishvili/github-copilot-thoughts-after-actually-trying-it-35nj</guid>
      <description>&lt;p&gt;After waiting some time, today I was invited to try out Github copilots' visual studio code extension.&lt;/p&gt;

&lt;p&gt;After using it some time, I personally feel that it is a next step in the coding .&lt;/p&gt;




&lt;p&gt;Simple commands are suggested right away&lt;br&gt;
&lt;a href="https://media.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%2F57yv5frxumojwzuin7f0.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57yv5frxumojwzuin7f0.gif" alt="elems"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are some very practical suggestions as well (they are trivial , but I google them all the time still)&lt;br&gt;
&lt;a href="https://media.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%2Fl1m4a6hc792kec7rknfx.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1m4a6hc792kec7rknfx.gif" alt="dates"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Sometimes it suggests ridiculous solutions &lt;a href="https://media.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%2Fm60473kp528ln2jbwcgs.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm60473kp528ln2jbwcgs.gif" alt="ridc"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But by clicking &lt;code&gt;control+enter&lt;/code&gt; we can check several other possible solutions and choose most efficient one&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6p341swpnwfzs3ryaqv.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb6p341swpnwfzs3ryaqv.gif" alt="sol"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;It can actually generate function body from comments (usually it was other way around)&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg943s4nn1zz1di89tek1.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg943s4nn1zz1di89tek1.gif" alt="date"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One other thing I noticed is that, sometimes, when it comes to libraries, it suggests code from old versions.&lt;/p&gt;

&lt;p&gt;For example, in the image bellow it tries to draw scatterplot using d3 v3 (v4 was released in Jun 2016 ) and latest version is d3 v7&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vsg29zmbxgt7xrlbvjz.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vsg29zmbxgt7xrlbvjz.png" alt="Screenshot 2021-07-03 at 12.26.48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aside from the issues mentioned above, I personally think that this is a next step in the AI assisted programming and can't wait to see how it will progress.&lt;/p&gt;

&lt;p&gt;If you are eager to try it out, but you are still in waitlist , just comment your uncompleted code piece bellow and I will try respond with copilot suggested snippets.&lt;/p&gt;

&lt;p&gt;Thanks for reading :)&lt;/p&gt;

</description>
      <category>githubcopilot</category>
      <category>ai</category>
      <category>pairprogramming</category>
      <category>keybindings</category>
    </item>
    <item>
      <title>Github - create a branch from issue</title>
      <dc:creator>David B.</dc:creator>
      <pubDate>Wed, 23 Dec 2020 23:50:50 +0000</pubDate>
      <link>https://forem.com/dbumbeishvili/github-create-a-branch-from-issue-4k3h</link>
      <guid>https://forem.com/dbumbeishvili/github-create-a-branch-from-issue-4k3h</guid>
      <description>&lt;p&gt;Coming from Gitlab to Github, the most wanted and used feature for me was the automatic creation of feature branches from issues.&lt;/p&gt;

&lt;p&gt;This was two years ago.&lt;/p&gt;

&lt;p&gt;Surprisingly, Github has yet to implement this useful feature. Currently, It's &lt;a href="https://github.com/isaacs/github/issues/1125" rel="noopener noreferrer"&gt;one of the most requested features&lt;/a&gt; on Github.&lt;/p&gt;

&lt;p&gt;Realizing this, I went ahead and implemented it using the Tampermonkey script.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;After installing it, you will see a new blue button on the issues page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clicking on it will create a new branch, which will have the same (almost) name as an issue.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftxdk41tvqy4jh2vfnufl.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftxdk41tvqy4jh2vfnufl.gif" alt="analytics"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code and installation instructions are on Github:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bumbeishvili/create-branch-from-issue" rel="noopener noreferrer"&gt;bumbeishvili/create-branch-from-issue&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please try it out. I really hope it will be useful for many.&lt;/p&gt;

&lt;p&gt;And I would appreciate your feedback&lt;/p&gt;

</description>
      <category>github</category>
      <category>javascript</category>
      <category>tampermonkey</category>
      <category>automation</category>
    </item>
    <item>
      <title> Data-driven range slider introduction</title>
      <dc:creator>David B.</dc:creator>
      <pubDate>Sat, 09 May 2020 09:07:37 +0000</pubDate>
      <link>https://forem.com/dbumbeishvili/data-driven-range-slider-introduction-4mj</link>
      <guid>https://forem.com/dbumbeishvili/data-driven-range-slider-introduction-4mj</guid>
      <description>&lt;p&gt;Recently, I was working on a project, where I needed a simple and beautiful range slider component with data distribution displayed above.&lt;/p&gt;

&lt;p&gt;Surprisingly, the search process finished unsuccessfully. I needed it for a React project, which further narrowed down my search results.&lt;/p&gt;

&lt;p&gt;The closest thing I found was kepler.gl 's range slider, which was really beautiful and functional as well&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NdErPPI7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252011.35.03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NdErPPI7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252011.35.03.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, I tried extracting it from the project and after 4 hours of trial and error, I surrendered without  major success&lt;/p&gt;

&lt;p&gt;That's when I decided to build it on my own and make it available for people like me&lt;/p&gt;

&lt;p&gt;I assembled several pieces of codes from my past projects and designed a dark version of range-slider&lt;/p&gt;

&lt;p&gt;So, there it is &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--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/bumbeishvili"&gt;
        bumbeishvili
      &lt;/a&gt; / &lt;a href="https://github.com/bumbeishvili/data-driven-range-slider"&gt;
        data-driven-range-slider
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      D3.js based data-driven range slider, date time support
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;
   
     &lt;a href="https://github.com/bumbeishvili/data-driven-range-slider"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qrfDpb8K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/81438390-c0372380-917d-11ea-8c50-e3b25923bdc7.gif"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;key points&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to use&lt;/li&gt;
&lt;li&gt;Very fast&lt;/li&gt;
&lt;li&gt;Filters and outputs data on its own (and does it in a performant way)&lt;/li&gt;
&lt;li&gt;Easy libs &amp;amp; frameworks integrations &lt;/li&gt;
&lt;li&gt;Intuitive data configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's review 3 scenarios of the data configuration process&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple data&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&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="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;span class="nx"&gt;rangeSlider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will give us following result&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lcVrJQGj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252012.21.20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lcVrJQGj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252012.21.20.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom access&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;may 6&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;rangeSlider&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will give us following result&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qzoZ66JT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252012.31.30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qzoZ66JT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252012.31.30.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom aggregation&lt;/strong&gt;&lt;br&gt;
Default aggregation is counting, we can use other aggregation methods as well.  For example, let's aggregate sum of numbers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&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="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;span class="nx"&gt;sumArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;rangeSlider&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// we could have skipped this&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aggregator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;group&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;sumArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will give us the following result&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--49xbzOAj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252012.39.18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--49xbzOAj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Screen%2520Shot%25202020-05-09%2520at%252012.39.18.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Brushing of the range slider will result in outputting exact ranges and selected data&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--enM1_dPB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/smp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--enM1_dPB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/smp.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a good way of adding interactivity to your web applications&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/bumbeishvili/data-driven-range-slider"&gt;Github repository of project&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://observablehq.com/@bumbeishvili/data-driven-range-slider"&gt;Play with it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bumbeishvili/data-driven-range-slider#integrations"&gt;Angular, react, vue integrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the case of questions, follow me on &lt;a href="https://twitter.com/dbumbeishvili"&gt;Twitter&lt;/a&gt; or connect on &lt;a href="https://www.linkedin.com/in/bumbeishvili/"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading this, I would love your feedback&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Covid-19 Live Insights - Hard rework</title>
      <dc:creator>David B.</dc:creator>
      <pubDate>Tue, 24 Mar 2020 16:49:59 +0000</pubDate>
      <link>https://forem.com/dbumbeishvili/covid-19-live-insights-hard-rework-1nfl</link>
      <guid>https://forem.com/dbumbeishvili/covid-19-live-insights-hard-rework-1nfl</guid>
      <description>&lt;p&gt;I want to republish the coronavirus analytics platform &lt;/p&gt;

&lt;p&gt;&lt;a href="https://coronavirus.davidb.dev/"&gt;https://coronavirus.davidb.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hoinmcSt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Other/Screen%2520Shot%25202020-03-24%2520at%252020.31.45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hoinmcSt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bumbeishvili/Assets/master/Other/Screen%2520Shot%25202020-03-24%2520at%252020.31.45.png" alt="Covid-19 image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New features :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live analytics&lt;/strong&gt; - data updated in every 15 m. It comes from John Hopkins university repo and Worldometers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location-based content&lt;/strong&gt; - based on your location, the corresponding country will be highlighted and corresponding language will be set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Predictions&lt;/strong&gt; - Predictions are made using polynomial regression function. 1,2,3 orders of regressions are applied, with rSquared more than 0.9.  It lets you see what will happen in one week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile-Friendly&lt;/strong&gt; - 50% of viewers were using mobile phones.&lt;/p&gt;

&lt;p&gt;It does have one weak point, which is translation. I translated words in different languages using google translate, so they won't be perfect. Here is the translation file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bumbeishvili/coronavirus.davidb.dev/blob/master/translate.csv"&gt;Translate.csv on Github&lt;/a&gt; (Pull requests welcome)&lt;/p&gt;

&lt;p&gt;As before, you can again check the country and continent level statistics and travel through time.&lt;/p&gt;

&lt;p&gt;I don't usually like to republish things, but I spent so much time on this, I can't just let it go unnoticed.&lt;/p&gt;

&lt;p&gt;I would appreciate your feedback&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>covid19</category>
    </item>
    <item>
      <title>I made coronavirus spread timeline</title>
      <dc:creator>David B.</dc:creator>
      <pubDate>Tue, 03 Mar 2020 15:11:33 +0000</pubDate>
      <link>https://forem.com/dbumbeishvili/i-made-coronavirus-spread-timeline-3o55</link>
      <guid>https://forem.com/dbumbeishvili/i-made-coronavirus-spread-timeline-3o55</guid>
      <description>&lt;p&gt;&lt;a href="https://coronavirus.davidb.dev"&gt;coronavirus.davidb.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am not sure where to share it, for the world to see, I personally think it's very useful since you can check current and past stats &lt;/p&gt;

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