<?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: Vladimir Gordeev 🇷🇺</title>
    <description>The latest articles on Forem by Vladimir Gordeev 🇷🇺 (@vladimir_vg).</description>
    <link>https://forem.com/vladimir_vg</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%2F109509%2Ff2ba6df8-1abb-4673-93a3-4673f80a93d0.jpg</url>
      <title>Forem: Vladimir Gordeev 🇷🇺</title>
      <link>https://forem.com/vladimir_vg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vladimir_vg"/>
    <language>en</language>
    <item>
      <title>Why your docker builds are slow?</title>
      <dc:creator>Vladimir Gordeev 🇷🇺</dc:creator>
      <pubDate>Wed, 24 Oct 2018 09:25:19 +0000</pubDate>
      <link>https://forem.com/vladimir_vg/why-your-docker-builds-are-slow-3h0</link>
      <guid>https://forem.com/vladimir_vg/why-your-docker-builds-are-slow-3h0</guid>
      <description>&lt;p&gt;The important thing when working with docker is to write Dockerfile instructions in the right order. It may speed up the build significantly.&lt;/p&gt;

&lt;p&gt;Every instruction in Dockerfile is similar to a commit in git branch. If you change something in the middle, everything that follows after should be executed again (rebased in git terms). Everything that was before change can be reused.&lt;/p&gt;

&lt;p&gt;All files that you add using COPY or ADD are considered as dependencies for everything that runs after.&lt;/p&gt;

&lt;p&gt;Hence two rules to speedup your image builds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changes rarely should be executed first&lt;/li&gt;
&lt;li&gt;avoid using 'ADD .' it makes everything depend on everything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add Gemfile, rebar.config, mix.exs or any other file where your dependencies specified. Install dependencies, compile them. And only &lt;strong&gt;after&lt;/strong&gt; that add your app source code.&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
    <item>
      <title>A bit about programming languages</title>
      <dc:creator>Vladimir Gordeev 🇷🇺</dc:creator>
      <pubDate>Wed, 24 Oct 2018 09:06:44 +0000</pubDate>
      <link>https://forem.com/vladimir_vg/a-bit-about-programming-languages-16mm</link>
      <guid>https://forem.com/vladimir_vg/a-bit-about-programming-languages-16mm</guid>
      <description>&lt;p&gt;It feels like there are two distinct programming languages that PL designers habitually mix into one.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Calculating language. It's code lives inside box with explicitly specified inputs and outputs. There is no IO, nor time inside the box.&lt;br&gt;
Program might be executed lazily or eagerly. Instructions might be executed sequentially, or may remind some kind of graph, in which exact path of execution is not clear. The main thing is that there are inputs and expected outputs. Reminds code in Prolog or Haskell.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing language. It's code runs inside loop-ring, instructions always executed eagerly and sequentially. Unlike boxes, there is a time inside ring, and it flows into one direction.&lt;br&gt;
Programs written in this language do all IO: receive data, process it using boxes from the first language, save state, send data outside. This language also describes components of the system and their dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reminds Erlang with it's receive-after-end and send. Reminds supervisor config, kubernetes service config.&lt;/p&gt;

&lt;p&gt;If we split these languages yet use them together, it may lead to something interesting. It may produce more powerful abstractions specific for tasks of each language. It may lead to something more convenient, more effective in terms of computer-human interface.&lt;/p&gt;

</description>
      <category>pl</category>
      <category>computerscience</category>
      <category>futureprogramming</category>
    </item>
    <item>
      <title>Things to consider before creating a new programming language</title>
      <dc:creator>Vladimir Gordeev 🇷🇺</dc:creator>
      <pubDate>Wed, 24 Oct 2018 08:19:01 +0000</pubDate>
      <link>https://forem.com/vladimir_vg/things-to-consider-before-creating-a-new-programming-language-1g11</link>
      <guid>https://forem.com/vladimir_vg/things-to-consider-before-creating-a-new-programming-language-1g11</guid>
      <description>&lt;p&gt;If you are thinking about creating a new programming language, consider the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code in this language is going to be ugly. People gonna abuse all wonderful features in a way you could never imagine.&lt;/li&gt;
&lt;li&gt;People would have to work with lots of old, incomprehensible code that breaks all the time. Meanwhile the author of the code would already run away for easy money in blockchain startups.&lt;/li&gt;
&lt;li&gt;People wouldn't have any time to do the refactoring. If the code is inconvenient to test -- it won't be tested at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you consider all of these things and still decide to create a new PL, you may make a real breakthrough.&lt;/p&gt;

&lt;p&gt;Unlike those pesky languages with monoids in the category of endofunctors.&lt;/p&gt;

</description>
      <category>pl</category>
      <category>computerscience</category>
    </item>
  </channel>
</rss>
