<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>dmayilyan&#39;s cave</title>
    <link>/</link>
    <description>dmayilyan&#39;s cave</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 17 Jun 2024 15:46:42 +0400</lastBuildDate>
    
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Long line grep</title>
      <link>/posts/long_line_grep/</link>
      <pubDate>Mon, 17 Jun 2024 15:46:42 +0400</pubDate>
      
      <guid>/posts/long_line_grep/</guid>
      <description>&lt;p&gt;Sometimes when you &lt;code&gt;grep&lt;/code&gt; or &lt;code&gt;rg&lt;/code&gt; through a codebase among many others you get a search result that is a huge one-liner and shadows other search results moving them out of the screen. Search result can be a non pretty formatted json or something else. Assuming you want search for &lt;strong&gt;search_string&lt;/strong&gt;, preserve the coloring and still be able to see all search results in one terminal screen. Let&amp;rsquo;s assume 200 symbols is enough. Having that in mind we can pipe grep output to &lt;code&gt;cut&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep -rinI search_string --color&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;always | cut -c 1-200
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And of course one can create a custom function that uses grep with the 200 symbol cut. Just put this into your &lt;em&gt;.bashrc&lt;/em&gt; or &lt;em&gt;.bash_profile&lt;/em&gt; (&lt;em&gt;.zsh&lt;/em&gt;, &lt;em&gt;.zsh_profile&lt;/em&gt; if you use zsh) and you are good to go.
Source you rc file or just relogin with a new terminal and issue is resolved.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sgrep&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    grep -rinI --color&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;always &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | cut -c 1-200
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Line extraction approaches</title>
      <link>/posts/lines_extraction/</link>
      <pubDate>Fri, 17 May 2024 02:02:03 +0400</pubDate>
      
      <guid>/posts/lines_extraction/</guid>
      <description>&lt;p&gt;Recently I discovered &lt;a href=&#34;https://docs.python.org/3/library/itertools.html#itertools.dropwhile&#34;&gt;dropwhile&lt;/a&gt; and &lt;a href=&#34;https://docs.python.org/3/library/itertools.html#itertools.takewhile&#34;&gt;takewhile&lt;/a&gt; functions from &lt;code&gt;itertools&lt;/code&gt;. It&amp;rsquo;s quite common problem within a given project to extract lines from a file starting with lines A, B and C. Besides &amp;ldquo;traditional approaches&amp;rdquo; one can also go with a recursive function using dropwhile as seen below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; itertools &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; dropwhile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; re
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./qwe&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; file_in:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; file_in&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;readlines()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;final_lines &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;start_prefixes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Mode:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Class:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Having a common baseline set up let&amp;rsquo;s extract lines starting with mentioned prefixes. Let&amp;rsquo;s misuse the &lt;code&gt;dropwhile&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;subtract_lines&lt;/span&gt;(lines: list):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sublines &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dropwhile(&lt;span style=&#34;color:#66d9ef&#34;&gt;lambda&lt;/span&gt; x: &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;startswith(start_prefixes), lines)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sublines &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; list(sublines)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; sublines:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        final_lines&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(sublines[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; sublines[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:]:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        subtract_lines(sublines[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;subtract_lines(data)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;final_lines&lt;span style=&#34;color:#e6db74&#34;&gt;=}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Well, you can say this is a misuse of the method and it is. Having a list of lines already in the list &lt;code&gt;data&lt;/code&gt; there are simpler comprehension based solutions:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;final_lines &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [x &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; data &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;startswith(start_prefixes)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;These lines were extracted via a list comprehension&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;and startswith&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;final_lines&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Generate regex prefixes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;re_prefixes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;|&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join([i &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; start_prefixes])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Match with regex&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;final_lines &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [x &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; data &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; re&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;match&lt;/span&gt;(re_prefixes, x)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;These lines were extracted via a list comprehension&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;and regex&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;final_lines&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As we can see these solutions are not worse than the one above with dropwhile solution.&lt;/p&gt;
&lt;p&gt;The only useful use case that comes to my mind is some sort of a log preprocessing. In a situation where you need to get rid of a huge header with undefined line count before the data lines of interest.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>dmenu calculator</title>
      <link>/posts/dmenu_calculator/</link>
      <pubDate>Tue, 05 Mar 2024 01:48:17 +0400</pubDate>
      
      <guid>/posts/dmenu_calculator/</guid>
      <description>&lt;p&gt;For several years already, I have been using a manjaro distro with an i3 tiling windows manager on my home tower. By default, manjaro comes with its own version of dmenu, which is pretty vanilla. What I lack on a daily basis on my screen is an easy-to-access calculator. I tried patching/manually building dmenu to have an integrated calculator, but I ended up in conflicts. For me, it was a bit of a high price to pay for patching and rebuilding endlessly rather than to reach ipython for a simple calculation. Besides, dmenu seems to be the right place to have it.&lt;/p&gt;
&lt;p&gt;Today I learned, that one can install a rust port of dmenu that can be extended to have an integrated calculator. First we enforce uninstall with &lt;code&gt;d&lt;/code&gt; of the built-in dmenu:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yay -Rdd dmenu-manjaro
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Clone the &lt;a href=&#34;https://github.com/Shizcow/dmenu-rs&#34;&gt;repo&lt;/a&gt; from the github (We need the git version for the calc):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/Shizcow/dmenu-rs.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add calc plugin to &lt;code&gt;config.mk&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PLUGINS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; calc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And we would need to add a key binding to &lt;code&gt;.i3/config&lt;/code&gt; to run the calculator. Here are the 2 key bindings for &lt;code&gt;dmenu_run&lt;/code&gt; and &lt;code&gt;dmenu_run --calc&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bindsym $mod+d exec --no-startup-id dmenu_run
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bindsym $mod+equal exec --no-startup-id dmenu_run --calc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now press &lt;code&gt;$mod&lt;/code&gt; key (Win key in my case) and &lt;code&gt;=&lt;/code&gt; and voilà, it&amp;rsquo;s alive!
Enjoy!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Generate files from a csv</title>
      <link>/posts/csv2files/</link>
      <pubDate>Thu, 28 Dec 2023 03:55:49 +0400</pubDate>
      
      <guid>/posts/csv2files/</guid>
      <description>&lt;p&gt;Recently there was a need to create a set of files based on a csv file. Assume you have a csv file with comma as a separator that has a structure like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;+------+--------------+--------------+
|  123 | A            | randoom_hdk  |
|  345 | A            | random_dsa   |
|  456 | B            | random_lts   |
|  678 | A            | random_gcy   |
|  789 | B            | random_zlq   |
|  901 | B            | random_onw   |
|  ... | ...          | ...          |
+------+--------------+--------------+
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And we need to create files &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; sourced from second column with respective contents from the first column:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# file A

123
345
678
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# file B

456
789
901
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Solution that I came up with is based on shell and &lt;code&gt;awk&lt;/code&gt;. Well in my opinion there is little competition to this solution:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;awk -F &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{ print $1 &amp;gt; &amp;#34;sensor_lists/&amp;#34;$2}&amp;#39;&lt;/span&gt; sensor-ids.csv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-F &amp;#34;,&amp;#34;         cuts the csv file by comma 
$1             first column with ids
$2             second column with identifiers
&amp;gt;              redirect output to files based on the second column 
sensor_lists   the directory name
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This one-liner creates the files with names based on the second column and fills in every of those entires in column 1.&lt;/p&gt;
&lt;p&gt;Works, but what about the performance?
First we create a csv with random data inside. We expect 972 files with
Let&amp;rsquo;s benchmark the solution with hyperfine. We would need to cleanup the cache to have a clean run every single time:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hyperfine --prepare &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;rm data/* &amp;amp;&amp;amp; sync; echo 3 &amp;gt; sudo tee /proc/sys/vm/drop_caches&amp;#39;&lt;/span&gt; --runs &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; --show-output &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./create_lists.sh&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We get performance of&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  Time (mean ± σ):     10.697 s ±  0.189 s    [User: 10.609 s, System: 0.073 s]
  Range (min … max):   10.360 s … 11.076 s    30 runs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ok, how would a solution in python work out. I wrote it with quite some hard-coded lines of code to not have unnecessary variable allocations. More could&amp;rsquo;ve been done, but let&amp;rsquo;s go with this one for now. I will be using &lt;code&gt;python 3.11.6&lt;/code&gt; for this experimentation.&lt;/p&gt;
&lt;p&gt;Code looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; pandas &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; pd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_csv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;random_data.csv&amp;#34;&lt;/span&gt;, names&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;], usecols&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;groupby(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;apply(list)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; index, value &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;items():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    file_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./data/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;index&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(file_name, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; file:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        file&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join([str(i) &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; value]))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the performance of it looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  Time (mean ± σ):      1.789 s ±  0.031 s    [User: 1.637 s, System: 0.149 s]
  Range (min … max):    1.747 s …  1.869 s    30 runs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A bit strange that the &lt;code&gt;python&lt;/code&gt; solution is significantly faster than the &lt;code&gt;awk&lt;/code&gt; based solution.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Jupyter %whos</title>
      <link>/posts/jupyter_whos/</link>
      <pubDate>Wed, 29 Nov 2023 15:49:43 +0400</pubDate>
      
      <guid>/posts/jupyter_whos/</guid>
      <description>&lt;p&gt;While creating a model or simply working in jupyter-notebook sometimes there is a need of an overview of variables in the memory. Besides &lt;a href=&#34;https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/nbextensions/varInspector/README.html&#34;&gt;extensions&lt;/a&gt; which I rarely use, what other options do we have? Apparently &lt;code&gt;%whos&lt;/code&gt; is a cell magic that combines &lt;code&gt;locals()&lt;/code&gt;, &lt;code&gt;shape&lt;/code&gt; for dataframes and &lt;code&gt;type()&lt;/code&gt; without a need to dig through &lt;code&gt;locals()&lt;/code&gt; dict keys and values.&lt;/p&gt;
&lt;p&gt;Output looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Variable         Type         Data/Info
---------------------------------------
data1_u          DataFrame         0  0.1  0.2       0.&amp;lt;...&amp;gt;n[503 rows x 555 columns]
data1_v          DataFrame         0  0.1  0.2  0.3    &amp;lt;...&amp;gt;n[503 rows x 555 columns]
data2_u          DataFrame         0  0.1  0.2       0.&amp;lt;...&amp;gt;n[503 rows x 555 columns]
data2_v          DataFrame         0  0.1  0.2  0.3    &amp;lt;...&amp;gt;n[503 rows x 555 columns]
filename_pairs   list         n=100
mask             DataFrame         1  1.1  1.2  1.3  1.&amp;lt;...&amp;gt;n[503 rows x 555 columns]
np               module       &amp;lt;module &amp;#39;numpy&amp;#39; from &amp;#39;/us&amp;lt;...&amp;gt;kages/numpy/__init__.py&amp;#39;&amp;gt;
pd               module       &amp;lt;module &amp;#39;pandas&amp;#39; from &amp;#39;/u&amp;lt;...&amp;gt;ages/pandas/__init__.py&amp;#39;&amp;gt;
plt              module       &amp;lt;module &amp;#39;matplotlib.pyplo&amp;lt;...&amp;gt;es/matplotlib/pyplot.py&amp;#39;&amp;gt;
u                str          1u.csv
v                str          1v.csv
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nice, no?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Environment specific method calls</title>
      <link>/posts/environment_specific_method_call/</link>
      <pubDate>Wed, 20 Sep 2023 22:17:16 +0400</pubDate>
      
      <guid>/posts/environment_specific_method_call/</guid>
      <description>&lt;p&gt;Recently I stumbled upon a problem that &lt;a href=&#34;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html&#34;&gt;pandas.read_csv()&lt;/a&gt; changed its date parsing behaviour in version &lt;code&gt;2.0.0&lt;/code&gt;. Long story short there was a need to have an environment specific csv reading method calls. As it turns out there is &lt;a href=&#34;https://packaging.pypa.io/en/stable/specifiers.html&#34;&gt;a neat way&lt;/a&gt; to reach that behaviour via a core utility &lt;a href=&#34;https://pypi.org/project/packaging/&#34;&gt;packaging&lt;/a&gt;. In production we have pandas version specified in a compatible release clause while in other places strict and newer version is present. We need these steps to set up a universal flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create &lt;a href=&#34;https://packaging.pypa.io/en/stable/specifiers.html&#34;&gt;specifier set&lt;/a&gt; that will match &lt;code&gt;~=&lt;/code&gt; versions&lt;/li&gt;
&lt;li&gt;Parse given environment package version&lt;/li&gt;
&lt;li&gt;Compare above 2 and do the mehtod call accordingly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Long story short we need to have these lines to have environment specific method call:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; packaging.specifiers &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; SpecifierSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; packaging.version &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ver &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Version(pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;__version__)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ver &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; SpecifierSet(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~=1.3.5&amp;#34;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;We are in the first environment with the older version of pandas.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;We are in the second environment with newer version of pandas.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Elegant, no?&lt;/p&gt;
&lt;p&gt;P.S. We know that we can&amp;rsquo;t have older than &lt;code&gt;1.3.5&lt;/code&gt; version of pandas anywhere.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pandas isna()</title>
      <link>/posts/isna/</link>
      <pubDate>Fri, 01 Sep 2023 00:17:35 +0400</pubDate>
      
      <guid>/posts/isna/</guid>
      <description>&lt;p&gt;If you try to check for &lt;code&gt;np.nan&lt;/code&gt; or &lt;code&gt;None&lt;/code&gt; using pandas &lt;strong&gt;&lt;em&gt;isna()&lt;/em&gt;&lt;/strong&gt; to get a bool, that is either &lt;code&gt;True&lt;/code&gt; or &lt;code&gt;False&lt;/code&gt;. What if we want to get not nan cases? Well, we can add a &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; before or a common other solution is a &lt;em&gt;bitwise Not Operator&lt;/em&gt; &lt;strong&gt;&lt;em&gt;~&lt;/em&gt;&lt;/strong&gt;. What you would expect is getting the True for False and False for True. That&amp;rsquo;s true for the case of &lt;em&gt;not&lt;/em&gt; and it&amp;rsquo;s not true for &lt;strong&gt;&lt;em&gt;~&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python3&#34; data-lang=&#34;python3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isna(&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isna(&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;~&lt;/span&gt;pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isna(&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What happened, why did we get -2?&lt;/p&gt;
&lt;p&gt;As it turns out &lt;code&gt;~pd.isna(None)&lt;/code&gt; when exposed to bitwise operation is taken not as a bool but a number representation of &lt;code&gt;True&lt;/code&gt; which is 1. What does it mean to apply a bitwise not on number one?&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mathtt{NOT} \quad &amp;amp;0000\;0000\;0000\;0001 \; \mathsf{(decimal 1)} \\
=\quad &amp;amp;1111\;1111\;1111\;1110 \; \mathsf{(decimal -2)}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s from where -2 came from.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>List plotting in mathematica</title>
      <link>/posts/legendre/</link>
      <pubDate>Mon, 28 Aug 2023 02:10:31 +0400</pubDate>
      
      <guid>/posts/legendre/</guid>
      <description>&lt;p&gt;While searching for something else in Wasserman stumbled upon &lt;a href=&#34;https://en.wikipedia.org/wiki/Legendre_polynomials&#34;&gt;&lt;strong&gt;Legendre polynomials&lt;/strong&gt;&lt;/a&gt; and decided to have a look at visual representation of it. And why not to do that in Mathematica?!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Mathematica&#34; data-lang=&#34;Mathematica&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;(*Defining Legendre polynomial*)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;f[j_] &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt;j j&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;) D[(x&lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt;j, {x, j}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;(*Creating an empty list and appending first 5 polynomials*)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lst &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Do[AppendTo[lst, f[j]], {j, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;(*Plotting and styling*)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Plot[lst, {x, &lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PlotRange &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {{&lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;}, {&lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;}},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PlotLabel &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Style[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Legendre polynomials&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   FontSize &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   FontWeight &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Bold],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Background &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Lighter[Black, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.2&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ImageSize &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;}]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This perhaps could&amp;rsquo;ve been done with a &lt;code&gt;Table&lt;/code&gt;, but let&amp;rsquo;s keep that for the next time.&lt;/p&gt;
&lt;p&gt;And here what we get as a result.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;./legendre.svg&#34; alt=&#34;Legendre polynomials&#34; title=&#34;First 6 polynomials&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>git submodules in Hugo netlify deployment</title>
      <link>/posts/hugo_netlify/</link>
      <pubDate>Thu, 24 Aug 2023 21:51:03 +0400</pubDate>
      
      <guid>/posts/hugo_netlify/</guid>
      <description>&lt;p&gt;As you may have guessed from the title, this blog is currently deployed on &lt;a href=&#34;netlify.com&#34;&gt;netlify&lt;/a&gt;. As they &lt;a href=&#34;https://docs.netlify.com/integrations/frameworks/hugo/#hugo-themes&#34;&gt;claim&lt;/a&gt; in order to integrate a given theme one should add it as a submodule:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd YOUR_PROJECT_DIRECTORY
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git submodule add https://github.com/THEME_CREATOR/THEME_NAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Well, this didn&amp;rsquo;t work for me. What did work was explicit addition of the release, like this&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git submodule add -f https://github.com/dsrkafuu/hugo-theme-fuji.git@v2.8.2-migurdia themes/fuji
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In my case &lt;em&gt;v2.8.2-migurdia&lt;/em&gt; is the latest tagged version of the theme. After this minor touch and following the documentation I got what I wanted.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>First post</title>
      <link>/posts/first/</link>
      <pubDate>Sun, 20 Aug 2023 17:22:09 +0400</pubDate>
      
      <guid>/posts/first/</guid>
      <description>&lt;p&gt;As of writing this post I am not sure how the structure and content in this blog will look like. I will integrate my thing along the process of writing.&lt;/p&gt;
&lt;p&gt;For now the plan is to have 2 type of contents:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Today I Learned (TIL)&lt;/li&gt;
&lt;li&gt;More in depth technical reflexions of what I find interesting.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I will try to stick to a minimal count of posts per week, but let&amp;rsquo;s see how it goes ;)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>About</title>
      <link>/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/about/</guid>
      <description>&lt;p&gt;Hey there!&lt;/p&gt;
&lt;p&gt;My name is Davit(d). Some time ago, I decided on a job change, and looking at my web presence, I realized that my true self and interests are totally missing in my web representation. This website is a small step towards the reduction of that gap. It first serves my desire for expression rather than anything else.&lt;/p&gt;
&lt;p&gt;This website is a try to store daily data science and programming experiments and Today I Learned (tag &lt;a href=&#34;https://mayilyan.blog/tags/til/&#34;&gt;til&lt;/a&gt;) type of short posts. I think that bigger projects can speak for themselves and will not be presented here. Moreover, non-technical, philosophical, psychological, sociological, and personal takes on the topics mentioned will also be missing from this website.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
