<rss version="2.0"
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>main page on Hugo Book</title>
        <link>https://texnolog.org/</link>
        <description>Recent content in main page on Hugo Book</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>uk</language>
        <managingEditor>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</managingEditor>
        <webMaster>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</webMaster>
        <lastBuildDate>Mon, 26 Jul 2021 00:00:00 +0000</lastBuildDate>
    
        <atom:link href="https://texnolog.org/rss.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
<title>KDE6 - RDP</title>
<link>https://texnolog.org/linux/rdp/</link>
<pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/rdp/</guid>
<description>&lt;h2 id=&#34;налаштування-віддаленого-доступу-в-kde-plasma-6-rdp&#34;&gt;Налаштування віддаленого доступу в KDE Plasma 6 (RDP)&lt;/h2&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;$ sudo apt install krdp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt install xdg-desktop-portal-kde
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Відкрити «Системні налаштування  (System Settings)»&lt;/li&gt;
&lt;li&gt;Знайти розділ Віддалений робочий стіл (Remote Desktop)»&lt;/li&gt;
&lt;li&gt;Перевести перемикач «Enable RDP-сервер» у активне положення&lt;/li&gt;
&lt;li&gt;Налаштувати параметри&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;проблеми:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.manjaro.org/t/krdp-server-no-longer-starts-after-2025-02-17-update-testing-branch/174382/6&#34;&gt;KRDP server no longer starts after 2025-02-17 update&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ssh-тунель--krdckrfb-класичний-kde&#34;&gt;SSH-тунель + KRDC/KRFB (Класичний KDE)&lt;/h2&gt;
&lt;p&gt;Якщо ви хочете використовувати вбудовані інструменти KDE: KRFB (сервер надання доступу) та KRDC (клієнт).&lt;/p&gt;
&lt;h3 id=&#34;1-створення-зворотного-тунелю-з-віддаленої-машини-homework&#34;&gt;1. Створення &amp;ldquo;зворотного&amp;rdquo; тунелю з віддаленої машини (Home/Work)&lt;/h3&gt;
&lt;p&gt;На комп&amp;rsquo;ютері, до якого треба підключитися, виконайте:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Linux</title>
<link>https://texnolog.org/tags/linux/</link>
<pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/linux/</guid>
<description></description>
</item>
    
    <item>
<title>Linuxes</title>
<link>https://texnolog.org/linux/</link>
<pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/</guid>
<description></description>
</item>
    
    <item>
<title>Tags</title>
<link>https://texnolog.org/tags/</link>
<pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/</guid>
<description></description>
</item>
    
    <item>
<title>leather</title>
<link>https://texnolog.org/leather/</link>
<pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/leather/</guid>
<description>&lt;h2 id=&#34;my-hobby&#34;&gt;my hobby&amp;hellip;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Увага! Розмір оригінальних файлів понад 4..5Mb&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_common/01.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_common/01_hu_38614f3d7f49fc2d.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_common/02.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_common/02_hu_2845a9aaff17bbc7.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_common/DSC_5930.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_common/DSC_5930_hu_4b7742568de7678.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;
&lt;h2 id=&#34;2025---перші-спроби&#34;&gt;2025 - Перші спроби&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_first/03.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_first/03_hu_a62d88aca7603222.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_first/04-1.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_first/04-1_hu_627ff750eec19086.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_first/04-4.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_first/04-4_hu_72942780129afdb7.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;
&lt;h2 id=&#34;2025---гаманець-дитячий&#34;&gt;2025 - Гаманець дитячий&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_wallet_child/DSC_5832.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_wallet_child/DSC_5832_hu_9d1652b0bcf3a7b5.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_wallet_child/DSC_5833.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_wallet_child/DSC_5833_hu_4bd8ec3869f1b184.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_wallet_child/DSC_5837.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_wallet_child/DSC_5837_hu_6209d4d66de0f20f.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;
&lt;h2 id=&#34;2025---гаманець&#34;&gt;2025 - Гаманець&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_wallet_my/20251102_125419.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_wallet_my/20251102_125419_hu_3cdb11c0e62d80e5.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_wallet_my/20251102_125433.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_wallet_my/20251102_125433_hu_d24e4fb7bbd31386.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2025_wallet_my/DSC_5960.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2025_wallet_my/DSC_5960_hu_17c78c4442faf34d.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;
&lt;h2 id=&#34;2026---сумка&#34;&gt;2026 - Сумка&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6016.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6016_hu_68af408351a45636.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6019.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6019_hu_3f1cdebd1b30fb.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6040.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6040_hu_1587ef9c7fc446c0.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6047.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6047_hu_ced72a19122a5056.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6049.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6049_hu_c1dbaf1539a2ae8b.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6072.JPG&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/leather/2026_cross_body/DSC_6072_hu_8f75ac1d4647d102.JPG&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;</description>
</item>
    
    <item>
<title>Leather</title>
<link>https://texnolog.org/tags/leather/</link>
<pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/leather/</guid>
<description></description>
</item>
    
    <item>
<title>Photo</title>
<link>https://texnolog.org/tags/photo/</link>
<pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/photo/</guid>
<description></description>
</item>
    
    <item>
<title>CMS</title>
<link>https://texnolog.org/tags/cms/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/cms/</guid>
<description></description>
</item>
    
    <item>
<title>Directus</title>
<link>https://texnolog.org/tags/directus/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/directus/</guid>
<description></description>
</item>
    
    <item>
<title>Directus CMS</title>
<link>https://texnolog.org/soft/directus/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/directus/</guid>
<description>&lt;h1 id=&#34;інсталляція-nodejs--directus&#34;&gt;Інсталляція NodeJS &amp;amp; Directus&lt;/h1&gt;
&lt;p&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;$ sudo apt install nodejs npm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ node --version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ npm --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Нові версії і керування ними більш гнучко виконувати за допомогою nvm (Node Version Manager)&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;&lt;span style=&#34;color:#75715e&#34;&gt;# встановлення nvm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
&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;# перезавантаження профілю shell&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ source ~/.bashrc
&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;# перегляд доступних версій&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nvm list-remote
&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;# встановлення останньої версії NodeJS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nvm install node
&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;# встановлення конкретної версії&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nvm install &lt;span style=&#34;color:#ae81ff&#34;&gt;22&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;# перемикання між версіями&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nvm use &lt;span style=&#34;color:#ae81ff&#34;&gt;22&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;# встановлення версії за замовчуванням:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nvm alias default &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Встановлюємо &lt;strong&gt;Directus&lt;/strong&gt; і драйвер бази даних, з якою працюватимемо надалі&lt;/p&gt;</description>
</item>
    
    <item>
<title>Soft</title>
<link>https://texnolog.org/tags/soft/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/soft/</guid>
<description></description>
</item>
    
    <item>
<title>Softs</title>
<link>https://texnolog.org/soft/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/</guid>
<description></description>
</item>
    
    <item>
<title>Strapi</title>
<link>https://texnolog.org/tags/strapi/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/strapi/</guid>
<description></description>
</item>
    
    <item>
<title>Strapi CMS</title>
<link>https://texnolog.org/soft/strapi/</link>
<pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/strapi/</guid>
<description>&lt;h1 id=&#34;installation-debian&#34;&gt;Installation (Debian)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;install &lt;a href=&#34;https://nodesource.com/blog/installing-node-js-tutorial-debian-linux&#34;&gt;Node.js for old version: Debian 7 (Wheezy), Debian 8 (Jessie)&lt;/a&gt; or &lt;a href=&#34;https://deb.nodesource.com/&#34;&gt;Node.js DEB repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;install npm&lt;/li&gt;
&lt;li&gt;install strapi&lt;/li&gt;
&lt;/ul&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;$ curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo -E bash nodesource_setup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get install -y nodejs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;create-project&#34;&gt;Create project&lt;/h2&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;$ mkdir ./strapi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd ./strapi/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ npm create strapi@latest SiteName
&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;# for upgrade Strapi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ npx @strapi/upgrade latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;run-admin-panel&#34;&gt;Run admin panel&lt;/h2&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;$ cd ./strapi/SiteName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ npm run develop     &lt;span style=&#34;color:#75715e&#34;&gt;# autoReload enabled&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;# $ npm run develop --no-watch-admin&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;# $ npm run start     # autoReload disabled&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;# $ npm run build     # build admin panel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Strapi admin panel should be run on http://localhost:1337/admin&lt;/p&gt;</description>
</item>
    
    <item>
<title>Blender 3D</title>
<link>https://texnolog.org/study/blender/</link>
<pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/study/blender/</guid>
<description>&lt;h2 id=&#34;video-render&#34;&gt;Video render&lt;/h2&gt;
&lt;p&gt;Відео краще генерувати в два етапи: 1) спочатку отримати всі кадри у вигляді окремих файлів 2) зібрати всі зображення в один відеофайл.&lt;/p&gt;
&lt;p&gt;Такий підхід дозволяє починати/продовжувати з будь-якого місця, а також рендерити паралельно на різних системах.&lt;/p&gt;
&lt;h2 id=&#34;підготовка-кадрів&#34;&gt;Підготовка кадрів&lt;/h2&gt;
&lt;p&gt;В налаштування виставити:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;роздільну здатність (2560×1440 - 1920х1080 - 1280×720&amp;hellip;)&lt;/li&gt;
&lt;li&gt;частоту кадрів (не менше 24/сек)&lt;/li&gt;
&lt;li&gt;діапазон кадрів для рендеру (за замовчуванням, починати з 1 і закінчувати останнім, з кроком 1)&lt;/li&gt;
&lt;li&gt;формат графічних файлів&lt;/li&gt;
&lt;li&gt;шлях для зберігання&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Після виконання &lt;strong&gt;Render -&amp;gt; Render Animation&lt;/strong&gt; в каталог зберігання буде завантажено окремі файли (png чи jpg) з упорядкованою нумерацією у назвах.&lt;/p&gt;</description>
</item>
    
    <item>
<title>Studies</title>
<link>https://texnolog.org/study/</link>
<pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/study/</guid>
<description></description>
</item>
    
    <item>
<title>Study</title>
<link>https://texnolog.org/tags/study/</link>
<pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/study/</guid>
<description></description>
</item>
    
    <item>
<title>Music</title>
<link>https://texnolog.org/tags/music/</link>
<pubDate>Fri, 22 Dec 2023 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/music/</guid>
<description></description>
</item>
    
    <item>
<title>Music Soft</title>
<link>https://texnolog.org/soft/music/</link>
<pubDate>Fri, 22 Dec 2023 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/music/</guid>
<description>&lt;h2 id=&#34;remove-and-isolation-online--free&#34;&gt;Remove and Isolation (online &amp;amp; free)&lt;/h2&gt;
&lt;h3 id=&#34;remove-instruments&#34;&gt;remove instruments&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://vocalremover.org&#34;&gt;vocalremover&lt;/a&gt; - separate voice from music&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jamorphosia.com&#34;&gt;jamorphosia&lt;/a&gt; - remove instruments from a song&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aivocalremover.com&#34;&gt;aivocalremover&lt;/a&gt; - extract instrumentals for karaoke&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;remove-vocal&#34;&gt;remove vocal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://vocali.se&#34;&gt;vocali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://multimedia.easeus.com/vocal-remover&#34;&gt;easeus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://myedit.online/en/audio-editor/vocal-remover&#34;&gt;myedit.online&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.remove-vocals.com/en&#34;&gt;remove-vocals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://songdonkey.ai&#34;&gt;songdonkey&lt;/a&gt; - vocal remover &amp;amp; AI Audio Splitter&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;online--non-free&#34;&gt;online &amp;amp; non free&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://moises.ai&#34;&gt;moises&lt;/a&gt; - remove vocals and instruments&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.notta.ai/en/tools/online-vocal-remover&#34;&gt;notta&lt;/a&gt; - separate the vocals and background music (120 minutes/month for free)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;python&#34;&gt;Python&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/facebookresearch/demucs&#34;&gt;demucs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/deezer/spleeter&#34;&gt;spleeter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Javascript</title>
<link>https://texnolog.org/tags/javascript/</link>
<pubDate>Thu, 14 Dec 2023 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/javascript/</guid>
<description></description>
</item>
    
    <item>
<title>JavaScript :: D3.js</title>
<link>https://texnolog.org/programming/d3-js/</link>
<pubDate>Thu, 14 Dec 2023 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/d3-js/</guid>
<description>&lt;h2 id=&#34;базовий-шаблон&#34;&gt;Базовий шаблон&lt;/h2&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;charset&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&amp;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;&amp;lt;!-- Load d3.js --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdnjs.cloudflare.com/ajax/libs/d3/7.8.5/d3.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;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;&amp;lt;!-- Create a div for SVG shapes --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;svg-container&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;width:1500px; height:800px;&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;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;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;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;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1500&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;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;height&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;800&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;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;svg&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#svg-container&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;svg&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xmlns&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.w3.org/2000/svg&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xlink&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.w3.org/1999/xlink&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;viewBox&amp;#34;&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;height&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#a6e22e&#34;&gt;width&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#a6e22e&#34;&gt;height&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:#a6e22e&#34;&gt;call&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;zoom&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;zoom&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&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:#a6e22e&#34;&gt;svg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;transform&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;zoomTransform&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;g&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:#75715e&#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;        ....
&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;    */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;додавання-обєктів&#34;&gt;Додавання об&amp;rsquo;єктів&lt;/h2&gt;
&lt;h3 id=&#34;власні-атрибути&#34;&gt;Власні атрибути&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;svg&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;circle&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;shape_id&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cx&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cy&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;r&amp;#34;&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 style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fill&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#68b2a1&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:#75715e&#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;&lt;/span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;150&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;to&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;person&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;// отримати значення (ідентифікація по &amp;#34;id&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:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#shape_id&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;to&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;// отримати значення (ітерація по всім доступним &amp;#34;circle&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:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;selectAll&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;circle&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:#a6e22e&#34;&gt;each&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&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; ( &lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;===&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;150&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;// ...
&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;&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;встановити-css-класи&#34;&gt;Встановити CSS-класи&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;svg&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;circle&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;shape_id&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cx&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cy&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;r&amp;#34;&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 style=&#34;color:#75715e&#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;&lt;/span&gt;    .&lt;span style=&#34;color:#a6e22e&#34;&gt;classed&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;base-class circle-class&amp;#34;&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#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;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#shape_id&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;classed&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;circle-class&amp;#34;&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:#75715e&#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;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#shape_id&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;class&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;встановити-події&#34;&gt;Встановити події&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;svg&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;line&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x1&amp;#34;&lt;/span&gt;, &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 style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y1&amp;#34;&lt;/span&gt;, &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 style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stroke&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;red&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:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mouseover&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&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:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stroke&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blue&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:#a6e22e&#34;&gt;on&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mouseout&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){&lt;span style=&#34;color:#a6e22e&#34;&gt;nodeMouseOut&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;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nodeMouseOut&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;// ....
&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;&lt;/span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;додати-текст&#34;&gt;Додати текст&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#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;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;svg&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&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:#a6e22e&#34;&gt;style&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fill&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;black&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:#a6e22e&#34;&gt;style&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;font-size&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;20px&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text-anchor&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;middle&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:#a6e22e&#34;&gt;text&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TEXT&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;// текст з посиланням 
&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;// в svg необхідний attr(&amp;#34;xlink&amp;#34;,  &amp;#34;http://www.w3.org/1999/xlink&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:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;svg&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;y&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text-anchor&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;middle&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:#a6e22e&#34;&gt;classed&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;link-class&amp;#39;&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:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;href&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://site.com&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:#a6e22e&#34;&gt;html&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TEXT&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;отримати-габарити&#34;&gt;Отримати габарити&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bb&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d3&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#shape-id&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;getBBox&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:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bb&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;bb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;bb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;bb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;bb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;height&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;градієнт&#34;&gt;Градієнт&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rg&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;svg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;defs&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:#75715e&#34;&gt;// gradient direction
&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;&lt;/span&gt;        .&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linearGradient&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_gradient&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0%&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0%&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;100%&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y2&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0%&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:#75715e&#34;&gt;// gradient color    
&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;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;rg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;offset&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0%&amp;#34;&lt;/span&gt;  ).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop-color&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#5294e2&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop-opacity&amp;#34;&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;    &lt;span style=&#34;color:#a6e22e&#34;&gt;rg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;offset&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;20%&amp;#34;&lt;/span&gt; ).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop-color&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#5294e2&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop-opacity&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&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:#a6e22e&#34;&gt;rg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;offset&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;100%&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop-color&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#5294e2&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;stop-opacity&amp;#34;&lt;/span&gt;, &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:#a6e22e&#34;&gt;svg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rect&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;50&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&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:#a6e22e&#34;&gt;attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fill&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;url(my_gradient)&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;видалення-обєктів&#34;&gt;Видалення об&amp;rsquo;єктів&lt;/h2&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// видалити всі об&amp;#39;єкти з svg
&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;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;svg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;selectAll&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;посилання&#34;&gt;Посилання&lt;/h2&gt;
&lt;p&gt;Examples:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Programmings</title>
<link>https://texnolog.org/programming/</link>
<pubDate>Thu, 14 Dec 2023 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/</guid>
<description></description>
</item>
    
    <item>
<title>SSH</title>
<link>https://texnolog.org/linux/ssh/</link>
<pubDate>Sat, 26 Nov 2022 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/ssh/</guid>
<description>&lt;h2 id=&#34;socks-proxy&#34;&gt;Socks proxy&lt;/h2&gt;
&lt;h3 id=&#34;перенаправити-трафік-через-віддалений-сервер&#34;&gt;Перенаправити трафік через віддалений сервер&lt;/h3&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;ssh -N -D 127.0.0.1:9000 user@remote.host -p xxxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-N&lt;/strong&gt; - не запускати shell на віддаленому сервері&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-D [local IP:] port&lt;/strong&gt; - емуляція SOCKS-сервера через порт 127.0.0.1:9000&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-p xxxx&lt;/strong&gt; - порт, який прослуховує SSHD на віддаленому сервері &lt;strong&gt;remote.host&lt;/strong&gt;, відмінний від 22 (за замовчуванням)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;налаштування-в-браузері-firefox&#34;&gt;Налаштування в браузері (Firefox)&lt;/h3&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/linux/ssh/ssh_socks/ssh_socks.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/linux/ssh/ssh_socks/ssh_socks_hu_ccd6c8f9f8840a3d.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;
&lt;h3 id=&#34;додаткові-джерела&#34;&gt;Додаткові джерела&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.opennet.ru/tips/1691_ssh_tunnel_socks.shtml&#34;&gt;Туннели с использованием SSH. Режим эмуляции Socks proxy в SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://routerus.com/how-to-setup-ssh-socks-tunnel-for-private-browsing/&#34;&gt;Как настроить туннель SSH SOCKS для приватного просмотра&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Fail2Ban</title>
<link>https://texnolog.org/linux/fail2ban/</link>
<pubDate>Sun, 27 Mar 2022 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/fail2ban/</guid>
<description>&lt;h2 id=&#34;управління&#34;&gt;Управління&lt;/h2&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;&lt;span style=&#34;color:#75715e&#34;&gt;# застосувати зміни&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo fail2ban-client reload
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo fail2ban-client restart
&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;# перевірити статус по окремому фільтру&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo fail2ban-client status my-filter
&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;# перевірити застосовані правила&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo iptables -S
&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;# unban ip:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo fail2ban-client set my-filter unbanip xxx.xxx.xxx.xxx
&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;# ban ip:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo fail2ban-client set my-filter banip xxx.xxx.xxx.xxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;фільтр&#34;&gt;Фільтр&lt;/h2&gt;
&lt;p&gt;Файли фільтрів знаходяться у &lt;strong&gt;/etc/fail2ban/filter.d/&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Definition&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;failregex &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;ignoreregex &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;datepattern &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;&lt;p&gt;Протестувати regex (без його застосування) можна командою &lt;strong&gt;fail2ban-regex [Options] &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; [Ignoreregex]&lt;/strong&gt;&lt;/p&gt;</description>
</item>
    
    <item>
<title>Ide</title>
<link>https://texnolog.org/tags/ide/</link>
<pubDate>Sat, 26 Mar 2022 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/ide/</guid>
<description></description>
</item>
    
    <item>
<title>VS Code Server</title>
<link>https://texnolog.org/soft/code-server/</link>
<pubDate>Sat, 26 Mar 2022 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/code-server/</guid>
<description>&lt;h2 id=&#34;встановлення&#34;&gt;Встановлення&lt;/h2&gt;
&lt;p&gt;Зі сторінки &lt;a href=&#34;https://github.com/coder/code-server/releases&#34;&gt;https://github.com/coder/code-server/releases&lt;/a&gt; завантажуємо потрібний файл (на момент написання &amp;ndash; це версія 4.2.0)&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;wget  https://github.com/coder/code-server/releases/download/v4.2.0/code-server_4.2.0_amd64.deb
&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;sudo apt install ./code-server_4.2.0_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;systemd&#34;&gt;systemd&lt;/h3&gt;
&lt;p&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;sudo touch /var/log/code-server-output.log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo touch /var/log/code-server-error.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Створюємо конфігураційний файл &lt;strong&gt;code-server.service&lt;/strong&gt;, у якому вказуємо користувача {USER} пароль {PASSWD} та прив&amp;quot;язуєм сервіс до {PORT}:&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;&lt;span style=&#34;color:#75715e&#34;&gt;# ...code-server.service&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:#f92672&#34;&gt;[&lt;/span&gt;Unit&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;Description&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;code-server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;nginx.service
&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:#f92672&#34;&gt;[&lt;/span&gt;Service&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;Type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;simple
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Environment&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;={&lt;/span&gt;PASSWD&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;ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/bin/code-server --bind-addr 127.0.0.1:&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;PORT&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; --user-data-dir &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/home/{USER}/.vscode-server&amp;#34;&lt;/span&gt;  --auth password
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User&lt;span style=&#34;color:#f92672&#34;&gt;={&lt;/span&gt;USER&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;Group&lt;span style=&#34;color:#f92672&#34;&gt;={&lt;/span&gt;USER&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;Restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;always
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RestartSec&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;StandardOutput&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;file:/var/log/code-server-output.log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;StandardError&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;file:/var/log/code-server-error.log
&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:#f92672&#34;&gt;[&lt;/span&gt;Install&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;WantedBy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Перевіряємо та запускаємо сервіс&lt;/p&gt;</description>
</item>
    
    <item>
<title>Python</title>
<link>https://texnolog.org/tags/python/</link>
<pubDate>Sat, 27 Nov 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/python/</guid>
<description></description>
</item>
    
    <item>
<title>Python :: Ajax</title>
<link>https://texnolog.org/programming/ajax/</link>
<pubDate>Sat, 27 Nov 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/ajax/</guid>
<description>&lt;h2 id=&#34;getsend-json&#34;&gt;Get/Send json&lt;/h2&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:#75715e&#34;&gt;# file: server.py&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:#f92672&#34;&gt;from&lt;/span&gt; flask &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Flask, jsonify, request, render_template
&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;app &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Flask(__name__)
&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:#a6e22e&#34;&gt;@app.route&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/favicon.ico&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;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;favicon&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;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&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:#a6e22e&#34;&gt;@app.route&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/&amp;#39;&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;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&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;return&lt;/span&gt; render_template(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;index.html&amp;#39;&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:#a6e22e&#34;&gt;@app.route&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/server&amp;#39;&lt;/span&gt;, methods&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&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;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;test&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; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;method &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        message &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;0.2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;d&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;text&amp;#39;&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;return&lt;/span&gt; jsonify(message)
&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; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;method &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_json())
&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;return&lt;/span&gt; jsonify({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;message&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;OK&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;value&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&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; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(host&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;, port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;, debug&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# ... /templates/index.html
&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;{{&amp;lt; &lt;span style=&#34;color:#f92672&#34;&gt;rawhtml&lt;/span&gt; &amp;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;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&amp;gt;Test&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;button&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;btn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;button&amp;#39;&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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http://localhost:5000/server&amp;#39;&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:#a6e22e&#34;&gt;btn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, () =&amp;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;/* -- Fetch API -- */&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;false&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;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;{{&amp;lt; /&lt;span style=&#34;color:#f92672&#34;&gt;rawhtml&lt;/span&gt; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;11-server-to-client--fetch-then-catch&#34;&gt;1.1. Server to Client : fetch-then-catch&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&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:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;) =&amp;gt; {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;json&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:#a6e22e&#34;&gt;then&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;) =&amp;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;// enter you logic when the fetch is successful
&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;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data = &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;catch&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) =&amp;gt; {&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;)})
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;12-server-to-client--fetch-async-await&#34;&gt;1.2. Server to Client : fetch-async-await&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getData&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;try&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;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&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;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;json&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;// enter you logic when the fetch is successful
&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;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data = &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) {&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&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;&lt;span style=&#34;color:#a6e22e&#34;&gt;getData&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;21-client-to-server--fetch-then-catch&#34;&gt;2.1. Client to Server : fetch-then-catch&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&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:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&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:#a6e22e&#34;&gt;headers&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;      {
&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;&amp;#39;Accept&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/json, text/plain, */*&amp;#39;&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;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/json&amp;#39;&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:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;( {&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some string&amp;#39;&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;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;json&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:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;// enter you logic when the fetch is successful
&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;&lt;/span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data = &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;catch&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) {&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;)});
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;22-client-to-server--fetch-async-await&#34;&gt;2.2. Client to Server : fetch-async-await&lt;/h3&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sendData&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;try&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;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&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:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&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:#a6e22e&#34;&gt;headers&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;        {
&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;&amp;#39;Accept&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/json, text/plain, */*&amp;#39;&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;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/json&amp;#39;&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:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;( {&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some string&amp;#39;&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;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;json&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;// enter you logic when the fetch is successful
&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;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;res = &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;res&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;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&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;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) {&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&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;&lt;span style=&#34;color:#a6e22e&#34;&gt;sendData&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;upload-file-to-server&#34;&gt;Upload File to Server&lt;/h2&gt;
&lt;h3 id=&#34;31-html-form&#34;&gt;3.1. html form&lt;/h3&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# ... /templates/index.html
&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;{{&amp;lt; &lt;span style=&#34;color:#f92672&#34;&gt;rawhtml&lt;/span&gt; &amp;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;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/upload&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;enctype&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;multipart/form-data&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Submit&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;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;{{&amp;lt; /&lt;span style=&#34;color:#f92672&#34;&gt;rawhtml&lt;/span&gt; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#75715e&#34;&gt;# file: server.py&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:#f92672&#34;&gt;from&lt;/span&gt; flask &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Flask, request, &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;, redirect, url_for
&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;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@app.route&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/upload&amp;#39;&lt;/span&gt;, methods&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&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;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;upload&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;file&amp;#39;&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; obj&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;filename &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&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;        print(obj&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read()) &lt;span style=&#34;color:#75715e&#34;&gt;# read or save file&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;return&lt;/span&gt; redirect(url_for(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;main&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;32-fetch-then-catch&#34;&gt;3.2. fetch-then-catch&lt;/h3&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# ... /templates/index.html
&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;{{&amp;lt; &lt;span style=&#34;color:#f92672&#34;&gt;rawhtml&lt;/span&gt; &amp;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;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;send_file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;accept &lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/*&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&amp;gt;Test&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;button&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;btn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;button&amp;#39;&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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;inp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;send_file&amp;#39;&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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http://localhost:5000/upload&amp;#39;&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:#a6e22e&#34;&gt;btn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, () =&amp;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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;formData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FormData&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:#a6e22e&#34;&gt;formData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;file&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;inp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;[&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 style=&#34;color:#a6e22e&#34;&gt;formData&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;value&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&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;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;options&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;        &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&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:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;formData&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;// If you add this, upload won&amp;#39;t work (see links) !!!
&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;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// headers: { &amp;#39;Content-Type&amp;#39;: &amp;#39;multipart/form-data&amp;#39; }
&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;&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:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;options&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:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;response&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;json&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:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;// enter you logic when the fetch is successful
&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;&lt;/span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data = &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&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;catch&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;) {&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;error&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;false&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;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;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;{{&amp;lt; /&lt;span style=&#34;color:#f92672&#34;&gt;rawhtml&lt;/span&gt; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#75715e&#34;&gt;# file: server.py&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:#f92672&#34;&gt;from&lt;/span&gt; flask &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Flask, request, &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;, redirect, url_for
&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;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@app.route&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/upload&amp;#39;&lt;/span&gt;, methods&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&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;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;upload&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;# get some value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;values&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value&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;# get file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    uploaded_file &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;files[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;file&amp;#39;&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; uploaded_file&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;filename &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(uploaded_file&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read())
&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;# return data    &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;return&lt;/span&gt; jsonify({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;save&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;OK&amp;#39;&lt;/span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;посилання&#34;&gt;Посилання&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/ru/docs/Web/API/Fetch_API/Using_Fetch&#34;&gt;Использование Fetch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.miguelgrinberg.com/post/handling-file-uploads-with-flask&#34;&gt;Handling File Uploads With Flask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://muffinman.io/blog/uploading-files-using-fetch-multipart-form-data/&#34;&gt;Uploading files using &amp;lsquo;fetch&amp;rsquo; and &amp;lsquo;FormData&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Syncthing</title>
<link>https://texnolog.org/soft/syncthing/</link>
<pubDate>Sun, 22 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/syncthing/</guid>
<description>&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&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;$ curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deb https://apt.syncthing.net/ syncthing stable&amp;#34;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/syncthing.list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get install syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;run-web-gui&#34;&gt;Run web-gui&lt;/h3&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;$ syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Якщо сервіс вже запущено (наприклад, після перезавентаження системи при налаштованому systemd), то доступ до web-інтерфейсу можливий за адресою &lt;strong&gt;127.0.0.1:8384&lt;/strong&gt; (адреса з config)&lt;/p&gt;
&lt;h3 id=&#34;run-system-service&#34;&gt;Run system service&lt;/h3&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;$ sudo systemctl enable syncthing@username.service
&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;#   Created symlink from /etc/systemd/system/multi-user.target.wants/syncthing@linuxbabe.service &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;#   to /lib/systemd/system/syncthing@.service.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo systemctl start syncthing@username.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ systemctl status syncthing@username.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;username&lt;/strong&gt; &amp;ndash; кориcтувач, від імені якого запускаєтья сервіс.&lt;/p&gt;</description>
</item>
    
    <item>
<title>Syncthing</title>
<link>https://texnolog.org/tags/syncthing/</link>
<pubDate>Sun, 22 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/syncthing/</guid>
<description></description>
</item>
    
    <item>
<title>3D</title>
<link>https://texnolog.org/tags/3d/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/3d/</guid>
<description></description>
</item>
    
    <item>
<title>Bookmark</title>
<link>https://texnolog.org/tags/bookmark/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/bookmark/</guid>
<description></description>
</item>
    
    <item>
<title>Design (bookmark)</title>
<link>https://texnolog.org/engineering/design/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/engineering/design/</guid>
<description>&lt;h2 id=&#34;свободные-для-доступа-3d-модели&#34;&gt;Свободные для доступа 3D модели&lt;/h2&gt;
&lt;h3 id=&#34;элементы-станочных-ситем&#34;&gt;Элементы станочных ситем&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mcmaster.com/&#34;&gt;mcmaster.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.solidcomponents.com&#34;&gt;solidcomponents.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.transtecno.com/ru/products/ac/stock/&#34;&gt;transtecno.com&lt;/a&gt; &amp;ndash; gearboxes/motors&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.nookindustries.com&#34;&gt;nookindustries.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://us.misumi-ec.com&#34;&gt;us.misumi-ec.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www13.boschrexroth-us.com/PartStream/Default.aspx&#34;&gt;Bosch Rexroth&amp;rsquo;s - 3D CAD Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.astbearings.com&#34;&gt;astbearings.com - bearings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;модели-общего-назнанчения&#34;&gt;Модели общего назнанчения&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://grabcad.com&#34;&gt;grabcad.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.3dcontentcentral.com&#34;&gt;3dcontentcentral.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.tracepartsonline.net&#34;&gt;tracepartsonline.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;арт&#34;&gt;Арт:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.archibase.net&#34;&gt;archibase.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://archive3d.net&#34;&gt;archive3d.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;оснастка-производство&#34;&gt;Оснастка (производство)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.kurtworkholding.com&#34;&gt;kurtworkholding.com&lt;/a&gt; &amp;ndash; станочная оснастка&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.omil.it&#34;&gt;omil.it&lt;/a&gt; &amp;ndash; станочная оснастка&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.pawsworkholding.com&#34;&gt;Mutiple-Part Workholding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.carrlane.com&#34;&gt;International catalogue of modular fixtures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.amest.cz/ru/detali-valov-i-fljancev&#34;&gt;Проверка диаметра, прямолинейности и цилиндричности&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;примеры-конструктивные-решения&#34;&gt;Примеры, конструктивные решения&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://www.velmex.com/motor_examples.html&#34;&gt;Модули, направляющие&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://guns.allzip.org/topic/189/986828.html&#34;&gt;Гриндеры&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
</item>
    
    <item>
<title>Drawing</title>
<link>https://texnolog.org/engineering/drawing/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/engineering/drawing/</guid>
<description>&lt;h2 id=&#34;конвертер-одиниць&#34;&gt;Конвертер одиниць&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.inchcalculator.com/inch-fraction-calculator/&#34;&gt;Inch Fraction Calculator&lt;/a&gt; – Find Inch Fractions From Decimal and Metric Measurements&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;контактне-зварювання&#34;&gt;Контактне зварювання&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://nexnor.com/wp-content/uploads/2020/05/AWS-C1.1M-C1.1-2019.pdf&#34;&gt;AWS C1.1M/C1.1:2019 An American National Standard&lt;/a&gt; - Recommended Practices for Resistance Welding&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;AWS-C1.1M-C1.1-2019.pdf&#34;&gt;AWS C1.1M/C1.1:2019 An American National Standard&lt;/a&gt; - Direct Link (from this site)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://spotweldinc.com/PDFs/SWI_Set_Up_Guide.pdf&#34;&gt;SPOT WELDING DATA &amp;amp; SET-UP GUIDE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;зварювання&#34;&gt;Зварювання&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://svarka-24.info/uslovnoe-izobrazhenie-svarnyx-shvov-soglasno-iso-25532013&#34;&gt;Условное изображение сварных швов согласно ISO 2553:2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://kmdrus.ru/news/oboznacheniya-na-chertezhah-kmd&#34;&gt;Обозначения на чертежах КМД&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://3dstroyproekt.ru/drawings/primery-chertezhej-kmd&#34;&gt;Примеры чертежей КМД&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://app.aws.org/mwf/attachments//84/217584/weldsymbols.jpg&#34;&gt;American Welding Society&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Engineering Soft (bookmark)</title>
<link>https://texnolog.org/engineering/3d-soft/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/engineering/3d-soft/</guid>
<description>&lt;h2 id=&#34;how-to&#34;&gt;How-to&lt;/h2&gt;
&lt;h3 id=&#34;solidworks&#34;&gt;SolidWorks&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.saprobasni.ru/2010/08/o-solidworks.html&#34;&gt;Преобразование: image to vector&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;catia&#34;&gt;CATIA&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://catia-tnt.blogspot.com/&#34;&gt;CATIA V5&lt;/a&gt; &amp;ndash; blog&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catiadoc.free.fr/&#34;&gt;CATIA DOC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tatatechnologies.wordpress.com/tag/catia/&#34;&gt;CATIA TIPS&lt;/a&gt; &amp;ndash; blog&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.scripting4v5.com/additional-articles/&#34;&gt;CATIA MACRO PROGRAMMING GUIDE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tech-ecke.de/index_quereinstieg.htm?/catscript/product.htm&#34;&gt;CATScript / VBA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;soft&#34;&gt;Soft&lt;/h2&gt;
&lt;h3 id=&#34;3d-cad&#34;&gt;3D CAD&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.onshape.com&#34;&gt;Onshape&lt;/a&gt; (web-based)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;complex-structures&#34;&gt;Complex structures&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://ntopology.com/&#34;&gt;nTopology&lt;/a&gt; (free version)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;3d-point-cloud--mesh&#34;&gt;3D point cloud / mesh&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cloudcompare.org&#34;&gt;CloudCompare&lt;/a&gt; (Cross-platform)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.gom-inspect.com&#34;&gt;GOM Inspect&lt;/a&gt; (Windows)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://meshlab.sourceforge.net&#34;&gt;MeshLab&lt;/a&gt; (Cross-platform)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;webgl-based&#34;&gt;WebGl-based&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://threejs.org&#34;&gt;Three.js&lt;/a&gt; - Javascript 3D library&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cesiumjs.org&#34;&gt;Cesium&lt;/a&gt; - an open-source JavaScript library for world-class 3D globes and maps&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;viewers&#34;&gt;Viewers&lt;/h3&gt;
&lt;h2 id=&#34;cae&#34;&gt;CAE&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://simscale.com&#34;&gt;SimScale - CFD, FEA, and Thermal Simulation (web-based)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;cam&#34;&gt;CAM&lt;/h3&gt;
&lt;h3 id=&#34;links-collection&#34;&gt;Links collection&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://www.shapeoko.com/wiki/index.php/CAM&#34;&gt;http://www.shapeoko.com/wiki/index.php/CAM&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
</item>
    
    <item>
<title>Engineerings</title>
<link>https://texnolog.org/engineering/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/engineering/</guid>
<description></description>
</item>
    
    <item>
<title>Manufacturing</title>
<link>https://texnolog.org/tags/manufacturing/</link>
<pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/manufacturing/</guid>
<description></description>
</item>
    
    <item>
<title>Hugo</title>
<link>https://texnolog.org/soft/hugo/</link>
<pubDate>Tue, 17 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/hugo/</guid>
<description>&lt;h2 id=&#34;assembly&#34;&gt;Assembly&lt;/h2&gt;
&lt;p&gt;Параметр &lt;strong&gt;draft: true&lt;/strong&gt; у заголовку сторінки означає, що створювані ресурси за замовчуванням є чернетками
і не будуть згенеровані в &lt;strong&gt;/public&lt;/strong&gt;. Ключ &lt;strong&gt;-D&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ hugo -D --logLevel info
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ключ &lt;strong&gt;logLevel (debug|info|warn|error)&lt;/strong&gt; відповідає за повноту виведення інформації.&lt;/p&gt;
&lt;h2 id=&#34;init-structure&#34;&gt;Init structure&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;hugo v0.86 linux/amd64&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Якщо стаття містить лише текст у форматі &lt;a href=&#34;https://uk.wikipedia.org/wiki/Markdown&#34;&gt;Markdown&lt;/a&gt;, то для включення її на сайт, файл достатньо зберегти у каталог &lt;strong&gt;/content&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;content
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   ├─ Section-I
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   |   ├─ article-01.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   |   ├─ article-02.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   |   ├─ article-03
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   |   |   ├─ index.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   |   |   └─ images
&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;   └─ Section-II
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       ├─ SubSection-a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       |       ├─ article-04.md
&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;       └─ SubSection-b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               ├─ article-05.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               └─ ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сторінка змісту по кожній &lt;strong&gt;Section&lt;/strong&gt; генерується рекурсивно у &lt;strong&gt;/layouts/_default/section.html&lt;/strong&gt; (в даному дизайні сайту, у зміст винесені лише два параметри з шаблону сторінки: &lt;strong&gt;Title&lt;/strong&gt; та &lt;strong&gt;Draft&lt;/strong&gt;).&lt;/p&gt;</description>
</item>
    
    <item>
<title>Database</title>
<link>https://texnolog.org/tags/database/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/database/</guid>
<description></description>
</item>
    
    <item>
<title>Databases</title>
<link>https://texnolog.org/database/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/database/</guid>
<description></description>
</item>
    
    <item>
<title>Docker</title>
<link>https://texnolog.org/soft/docker/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/docker/</guid>
<description>&lt;h2 id=&#34;установка-docker-и-docker-compose&#34;&gt;Установка docker и docker-compose&lt;/h2&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;&lt;span style=&#34;color:#75715e&#34;&gt;# install docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install -y docker.io
&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;# start service &amp;amp;&amp;amp; add to start automatically at boot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl start docker
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl enable docker
&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;# check&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run hello-world
&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;# install docker-compose (in python-pip)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install docker-compose
&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;# check (show version)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker-compose -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;docker-compose&#34;&gt;Docker-compose&lt;/h2&gt;
&lt;p&gt;По умолчанию, &lt;strong&gt;docker-compose u&lt;/strong&gt;p не будет перестраивать контейнеры,
если они уже есть на хосте. Чтобы заставить докер делать это, нужно использовать аргумент &lt;strong&gt;&amp;ndash;build&lt;/strong&gt;.
Обычно это нужно, когда сторонние зависимости проекта меняются или меняется докерфайл.
Docker умеет кэшировать слои и не будет перестраивать контэйнер, если ничего не поменялось.
При использовании &lt;strong&gt;&amp;ndash;build&lt;/strong&gt; повсеместно, вы, возможно, потеряете несколько секунд при старте приложения.
Но, при этом вы никогда не столкнетесь с магическими проблемами запуска новой версии приложения со старыми зависимостями.&lt;/p&gt;</description>
</item>
    
    <item>
<title>Grav CMS</title>
<link>https://texnolog.org/soft/grav/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/grav/</guid>
<description>&lt;h1 id=&#34;grav--open-source-flat-file-cms&#34;&gt;Grav :: open source flat-file CMS&lt;/h1&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.getgrav.org/17/basics/installation&#34;&gt;grav install&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.getgrav.org/17/webservers-hosting/servers/nginx&#34;&gt;nginx settings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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;&lt;span style=&#34;color:#75715e&#34;&gt;# php requirements (for Nginx)&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;sudo apt install apt-transport-https
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;echo &amp;#34;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;#34; &amp;gt; /etc/apt/sources.list.d/php.list&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt update
&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;sudo apt install php8.3-cli php8.3-&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;fpm,bz2,curl,ctype,dom,gd,mbstring,openssl,session,intl,simplexml,xml,zip&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;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://php.watch/articles/php-8.3-install-upgrade-on-debian-ubuntu#detailed&#34;&gt;How to install or upgrade to PHP 8.3 on Ubuntu and Debian&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;updates-with-cli&#34;&gt;Updates with CLI&lt;/h2&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;&lt;span style=&#34;color:#75715e&#34;&gt;# In site dir:&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;# 1. Check Permission&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo chown www-data:www-data -R .
&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;# 2. Updating Grav&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo -u www-data bin/gpm selfupgrade -f
&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;# 3. Updating Plugin and Theme&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo -u www-data bin/gpm update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.getgrav.org/17/basics/updates&#34;&gt;grav updates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Hiking</title>
<link>https://texnolog.org/tags/hiking/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/hiking/</guid>
<description></description>
</item>
    
    <item>
<title>InfluxDB</title>
<link>https://texnolog.org/database/influxdb/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/database/influxdb/</guid>
<description>&lt;h2 id=&#34;1-установка&#34;&gt;1. Установка&lt;/h2&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;&lt;span style=&#34;color:#75715e&#34;&gt;# DEBIAN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ source /etc/os-release
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deb https://repos.influxdata.com/debian &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; stable&amp;#34;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/influxdb.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:#75715e&#34;&gt;# UBUNTU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deb https://repos.influxdata.com/ubuntu bionic stable&amp;#34;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/influxdb.list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get install influxdb
&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;# Start and enable the service to start on boot up&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo systemctl enable --now influxdb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo systemctl status influxdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;firewall&#34;&gt;Firewall&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;TCP port 8086 is used for client-server communication over InfluxDB’s HTTP API&lt;/li&gt;
&lt;li&gt;TCP port 8088 is used for the RPC service for backup and restore&lt;/li&gt;
&lt;li&gt;TCP port 8888 is used for Chronograf&lt;/li&gt;
&lt;/ul&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;iptables -A INPUT -p tcp --dport &lt;span style=&#34;color:#ae81ff&#34;&gt;8086&lt;/span&gt; -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iptables -A INPUT -p tcp --dport &lt;span style=&#34;color:#ae81ff&#34;&gt;8888&lt;/span&gt; -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configuration&#34;&gt;Configuration&lt;/h3&gt;
&lt;p&gt;HTTP Authentication&lt;/p&gt;</description>
</item>
    
    <item>
<title>IoT</title>
<link>https://texnolog.org/tags/iot/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/iot/</guid>
<description></description>
</item>
    
    <item>
<title>Jitsi Meet</title>
<link>https://texnolog.org/soft/jitsimeet/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/jitsimeet/</guid>
<description>&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&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;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/bin/sh -c &amp;#39;/etc/init.d/prosody stop &amp;amp;&amp;amp; /etc/init.d/jitsi-videobridge2 stop &amp;amp;&amp;amp; /etc/init.d/jicofo stop&amp;#39;&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;&amp;#34;/bin/sh -c &amp;#39;/etc/init.d/prosody start &amp;amp;&amp;amp; /etc/init.d/jitsi-videobridge2 start &amp;amp;&amp;amp; sleep 5 &amp;amp;&amp;amp; /etc/init.d/jicofo start&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;managing-instance&#34;&gt;Managing instance&lt;/h2&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;$ sudo service jitsi-videobridge restart
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo service jitsi-videobridge stop
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo service jitsi-videobridge start
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo service jitsi-videobridge status
&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;The key directories you must be aware of are as follows:
&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; /var/log/jitsi: Contains the Java system logs as well as the application logs.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /usr/share/jitsi-meet: Contains the main application directory.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /etc/jitsi: System configuration files &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; all the components of Jitsi.
&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;When you reboot, the services should all come up automatically when you start.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;дополнительные-источники&#34;&gt;Дополнительные источники&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=OHHoqKCjJ0E&amp;amp;t=549s&#34;&gt;https://www.youtube.com/watch?v=OHHoqKCjJ0E&amp;amp;t=549s&lt;/a&gt;&lt;/p&gt;</description>
</item>
    
    <item>
<title>JupyterLab</title>
<link>https://texnolog.org/soft/jupyterlab/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/jupyterlab/</guid>
<description>&lt;h2 id=&#34;установка&#34;&gt;Установка&lt;/h2&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;sudo apt install python3-pip
&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;# устанавливаем pipenv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip3 install pipenv
&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;# если будет ошибка &amp;#34;pipenv: команда не найдена&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:#75715e&#34;&gt;# sudo -H pip3 install -U pipenv&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;# создаем каталог для приложения&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir ./env
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ./env/
&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;# узнаем версию python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 --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;&lt;span style=&#34;color:#75715e&#34;&gt;# активируем виртуальное окружение проекта&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipenv --python 3.5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipenv shell
&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;# устанавливаем приложения&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;env&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$  pipenv install jupyterlab
&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;# устанавливаем ядро (python3)&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;env&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$  pipenv install ipykernel
&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;# доступные ядра&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;env&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$  jupyter kernelspec 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:#75715e&#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:#f92672&#34;&gt;(&lt;/span&gt;env&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$  pipenv run jupyter lab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;конфигурация&#34;&gt;Конфигурация&lt;/h2&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;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;env&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$  pipenv run jupyter notebook --generate-config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После выполнения команды, будет создан файл &lt;strong&gt;/home/&amp;lt; USER &amp;gt;/.jupyter/jupyter_notebook_config.py&lt;/strong&gt;.
Добавляем следущие строки:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Lib</title>
<link>https://texnolog.org/tags/lib/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/lib/</guid>
<description></description>
</item>
    
    <item>
<title>Math</title>
<link>https://texnolog.org/tags/math/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/math/</guid>
<description></description>
</item>
    
    <item>
<title>Monit</title>
<link>https://texnolog.org/soft/monit/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/monit/</guid>
<description>&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&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;apt-get install monit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/default/monit&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;&lt;span style=&#34;color:#75715e&#34;&gt;# Set START to yes to start the monit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;START&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/monit/monitrc&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;&lt;span style=&#34;color:#75715e&#34;&gt;# set httpd port 2812 and&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;# use address localhost  # only accept connection from localhost&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;# allow localhost        # allow localhost to connect to the server and&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;# allow admin:monit      # require user &amp;#39;admin&amp;#39; with password &amp;#39;monit&amp;#39;&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проверяем ошибки и запускаем сервис:&lt;/p&gt;</description>
</item>
    
    <item>
<title>my photo</title>
<link>https://texnolog.org/photo/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/photo/</guid>
<description>&lt;h2 id=&#34;my-hobby&#34;&gt;my hobby&amp;hellip;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Зйомка велась на камеру &lt;strong&gt;NIKON D3000 18-55 VR KIT&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Увага! Розмір оригінальних файлів понад 4..5Mb&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2&gt;&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/01.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/01_hu_2740b1b5f0d8ce06.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/02.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/02_hu_ee454a3002ff93ad.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/03.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/03_hu_a6ecd2e46a08664b.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/04.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/04_hu_da28b3f8863face1.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/05.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/05_hu_b8c2dda4c70345bb.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/06.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/06_hu_9de1ddf2d418a8af.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/07.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/07_hu_636541b64aed0261.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/08.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/08_hu_54e3d10de9d21f65.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/09.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/09_hu_8aafa5e7f37b7925.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/10.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/10_hu_84b161d01b1a5850.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/11.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/11_hu_aed0b10852acf035.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/12.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/12_hu_2e1339bdea8be904.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/13.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/13_hu_f7e177876de6c590.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/14.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/14_hu_e296263f04df56fa.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/15.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/15_hu_ecf0da1829045333.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/16.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/16_hu_13861a6eedc87925.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/17.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/17_hu_2c0a49be89879036.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/18.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/18_hu_9c2c9d45207f2eb8.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/19.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/19_hu_be569a7b836e3139.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/20.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/20_hu_cc4964e104095e72.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/photo/photography/21.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/photo/photography/21_hu_1a42e9952b3b30e5.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;</description>
</item>
    
    <item>
<title>Orange Pi :: Accelerometer</title>
<link>https://texnolog.org/linux/arm/orangepi-accelerometer/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/arm/orangepi-accelerometer/</guid>
<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/adafruit/Adafruit_Python_ADXL345/blob/master/examples/simpletest.py&#34;&gt;Adafruit_Python_ADXL345&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.instructables.com/id/how-to-use-the-ADXL345-on-Raspberry-pi/&#34;&gt;how-to-use-the-ADXL345-on-Raspberry-pi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Orange Pi :: Armbian on Orange Pi Zero</title>
<link>https://texnolog.org/linux/arm/orangepi-armbian/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/arm/orangepi-armbian/</guid>
<description>&lt;p&gt;&lt;a href=&#34;https://www.armbian.com&#34;&gt;Armbian&lt;/a&gt; - linux for ARM development boards&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.orangepi.org/orangepizero&#34;&gt;Orange Pi Zero&lt;/a&gt; - open-source single-board computer&lt;/p&gt;
&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;
&lt;p&gt;Качаем с &lt;a href=&#34;https://dl.armbian.com/orangepizero&#34;&gt;https://dl.armbian.com/orangepizero&lt;/a&gt; образ (на момент написания статьи &amp;ndash; это файл &lt;strong&gt;Debian_stretch_next.7z&lt;/strong&gt;)
и распаковываем.&lt;/p&gt;
&lt;p&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;&lt;span style=&#34;color:#75715e&#34;&gt;# 1 способ - отображение списка всех подключенных блочных устройств&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ lsblk
&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;NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
&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;mmcblk0     179:0    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  7.4G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; disk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└─mmcblk0p1 179:1    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  7.3G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; part /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;&lt;span style=&#34;color:#75715e&#34;&gt;# 2 способ - посмотреть таблицу разделов на всех подключенных блочных устройствах&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo fdisk -l
&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;Disk /dev/mmcblk0: 7.4 GiB, &lt;span style=&#34;color:#ae81ff&#34;&gt;7969177600&lt;/span&gt; bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;15564800&lt;/span&gt; sectors
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Device     Boot Start End       Sectors   Size  Id  Type
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/mmcblk0p1  &lt;span style=&#34;color:#ae81ff&#34;&gt;8192&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;15253503&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;15245312&lt;/span&gt;  7.3G  &lt;span style=&#34;color:#ae81ff&#34;&gt;83&lt;/span&gt;  Linux
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;&lt;span style=&#34;color:#75715e&#34;&gt;# 3 способ - посмотреть UUID идентификаторы всех подключенных устройств&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo blkid
&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;/dev/mmcblk0p1: UUID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a2c25aee-d15d-4aa7-8f41-ab6bb511776f&amp;#34;&lt;/span&gt; TYPE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ext4&amp;#34;&lt;/span&gt; PARTUUID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;378fc799-01&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/mmcblk0: PTUUID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;378fc799&amp;#34;&lt;/span&gt; PTTYPE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dos&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;&lt;span style=&#34;color:#75715e&#34;&gt;# 4 способ - посмотреть очередь сообщений ядра, сразу после подлючения USB устройства&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo dmesg
&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;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;4.499562&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; mmcblk0: mmc0:0007 SD8GB 7.42 GiB
&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;4.501144&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; mmcblk0: p1
&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;8.622201&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; EXT4-fs &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;mmcblk0p1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: mounted filesystem with writeback data mode. Opts: &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;null&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;&lt;p&gt;В данном случае, карта памяти определилась как &lt;strong&gt;/dev/mmcblk0&lt;/strong&gt;
Запись образа выполняется командой:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Orange Pi :: Wifi on Orange Pi Zero</title>
<link>https://texnolog.org/linux/arm/orangepi-wifi/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/arm/orangepi-wifi/</guid>
<description>&lt;h2 id=&#34;1-сlient-mode&#34;&gt;1. Сlient mode&lt;/h2&gt;
&lt;p&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;apt install wpasupplicant iw wireless-tools
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Если есть &amp;ndash; удалить из системы пакеты: &lt;strong&gt;network-manager&lt;/strong&gt; / &lt;strong&gt;dnsmasq&lt;/strong&gt; / &lt;strong&gt;hostapd&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Командой &lt;strong&gt;dpkg -l | grep dhcp&lt;/strong&gt; проверить наличие нескольких установленных DHCP-клиентов (например, &lt;strong&gt;dhcpcd5&lt;/strong&gt; и &lt;strong&gt;isc-dhcp-client&lt;/strong&gt;).
Удалить &lt;strong&gt;dhcpcd5&lt;/strong&gt; иначе из-за конфликта, во время загрузки системы, для &lt;strong&gt;eth&lt;/strong&gt; будет получен ip, а для &lt;strong&gt;wlan&lt;/strong&gt; &amp;ndash; нет!&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Если в системе запущен DHCP-сервер &amp;ndash; удалить его или убрать из автозагрузки:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Orange Pi Zero</title>
<link>https://texnolog.org/tags/orange-pi-zero/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/orange-pi-zero/</guid>
<description></description>
</item>
    
    <item>
<title>Php</title>
<link>https://texnolog.org/tags/php/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/php/</guid>
<description></description>
</item>
    
    <item>
<title>Pipenv</title>
<link>https://texnolog.org/tags/pipenv/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/pipenv/</guid>
<description></description>
</item>
    
    <item>
<title>Python :: 3D graphics</title>
<link>https://texnolog.org/programming/python-3d/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/python-3d/</guid>
<description>&lt;h2 id=&#34;k3d-jupyter&#34;&gt;K3D-jupyter&lt;/h2&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; k3d
&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; trimesh
&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; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np
&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;plot &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; k3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;plot(name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;toolpath&amp;#39;&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;# read coordinates of segments:&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;# ...&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;# 100.000, 100.000, 100.000&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;# 26.000, 79.000, 100.000&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;# 26.000, 79.000, 0.000&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;# ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;segments &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;genfromtxt(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./g-code/out3d.txt&amp;#39;&lt;/span&gt;, delimiter&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;,&amp;#39;&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;# Draw Lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt_line &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; k3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;line(segments, shader&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mesh&amp;#39;&lt;/span&gt;, width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plot &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; plt_line
&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;# Draw Points&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt_points &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; k3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;points(positions&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;segments, point_size&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.3&lt;/span&gt;, shader&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;3d&amp;#39;&lt;/span&gt;, color&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0xff00ff&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plot &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; plt_points
&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;# Draw Mesh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;body &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;load_mesh(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Part9.stl&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mesh &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; k3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;mesh(body&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;vertices, body&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;faces)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plot &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; mesh
&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;plot&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;display()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;open3d&#34;&gt;Open3d&lt;/h2&gt;
&lt;h3 id=&#34;mesh&#34;&gt;mesh&lt;/h3&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; open3d &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; o3d
&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;# Import mesh (stl/obj/...)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mesh &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_triangle_mesh(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Part9.stl&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(mesh)
&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;# Show 3D model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;compute_vertex_normals()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;visualization&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;draw_geometries([mesh])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;voxels&#34;&gt;voxels&lt;/h3&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:#75715e&#34;&gt;# Voxelization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;voxel_grid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;geometry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;VoxelGrid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create_from_triangle_mesh(mesh, voxel_size&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(voxel_grid)
&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;# Show 3D model&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:#ae81ff&#34;&gt;3&lt;/span&gt;d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;visualization&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;draw_geometries([voxel_grid])
&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;# Save to file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(voxel_grid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_voxels())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;write_voxel_grid(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;voxels.ply&amp;#34;&lt;/span&gt;, voxel_grid, write_ascii&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;, compressed&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;, print_progress&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;cloud-points&#34;&gt;cloud points&lt;/h3&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:#75715e&#34;&gt;# Downsample the point cloud with a voxel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pcd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_point_cloud(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;voxel_grid.ply&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(pcd)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;downpcd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pcd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;voxel_down_sample(voxel_size&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;visualization&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;draw_geometries([downpcd],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  zoom&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.3412&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  front&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0.4257&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.2125&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.8795&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  lookat&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2.6172&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2.0475&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.532&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  up&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0694&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.9768&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.2024&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;# write to file by column&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pcd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; o3d&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_point_cloud(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cloud_cd.ply&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;array&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;asarray(pcd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;points)
&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;points.txt&amp;#34;&lt;/span&gt;, mode&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; f:
&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; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(len(array)):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        f&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:#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:#f92672&#34;&gt;%&lt;/span&gt;float(array[i][&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;item()))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        f&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:#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:#f92672&#34;&gt;%&lt;/span&gt;float(array[i][&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;item()))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        f&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:#e6db74&#34;&gt;%f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &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;float(array[i][&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;item()))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;trimesh&#34;&gt;Trimesh&lt;/h2&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; trimesh
&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; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np
&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; random
&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;mesh &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;load_mesh(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Part9.stl&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(mesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;bounds)
&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;# ============================== ray-mesh intersection=============================== #&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;ray_origins &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;0&lt;/span&gt;,&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;ray_directions &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;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 style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ray_origins &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;insert(ray_origins, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, [random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randrange(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;), random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randrange(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;), &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], axis&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ray_directions &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;insert(ray_directions, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, [random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randint(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;), random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randint(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;), &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], axis&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&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;# run the mesh-ray query&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;locations, index_ray, index_tri &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ray&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;intersects_location(ray_origins&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ray_origins, ray_directions&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ray_directions)
&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;# ================================== visualization ================================== #&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;scene &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Scene()
&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;# Rays (line segments for visualization as Path3D)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rays &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;load_path(np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hstack((ray_origins,ray_origins &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ray_directions&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30.0&lt;/span&gt;))&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;reshape(&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:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scene&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_geometry(rays)
&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;# Path3D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;segments &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;genfromtxt(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./g-code/out3d.txt&amp;#39;&lt;/span&gt;, delimiter&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;load_path(segments, color&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;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;125&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scene&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_geometry(path)
&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;# very slowly&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;#for item in range(1, len(segments)-1):&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;#    if segments[item-1].tolist() != segments[item].tolist():&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;#        cylinder = trimesh.creation.cylinder(radius=0.5, segment=([segments[item-1].tolist(), segments[item].tolist()]))&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;#        cylinder.visual.face_colors = [0, 0, 1., 0.5]&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;#        scene.add_geometry(cylinder)&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;# mesh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;unmerge_vertices() &lt;span style=&#34;color:#75715e&#34;&gt;# unmerge so viewer doesn&amp;#39;t smooth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;visual&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;face_colors &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;visual&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;face_colors[index_tri] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scene&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_geometry(mesh)
&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;# axis&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;axis &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;creation&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;axis(origin_size&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, transform&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;, origin_color&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;, axis_radius&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.2&lt;/span&gt;, axis_length&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;15.0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scene&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_geometry(axis)
&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;# plane&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plane &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; trimesh&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;creation&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;box(extents&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.01&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plane&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;visual&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;face_colors &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;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;125&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scene&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add_geometry(plane)
&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;# show the visualization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scene&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
</item>
    
    <item>
<title>Python :: Coockbook</title>
<link>https://texnolog.org/programming/python-coockbook/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/python-coockbook/</guid>
<description>&lt;h2 id=&#34;работа-с-текстом&#34;&gt;Работа с текстом&lt;/h2&gt;
&lt;p&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;print unidecode(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;текст на русском&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Преобразование кодировок в UTF-8:&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;print unicode(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;текст в какой-то кодировке&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Преобразование содержимого файла file в UTF-8:&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; codecs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;txtfile &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; codecs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;open(file, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf-8&amp;#34;&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; txtfile&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;txtfile&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;close()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;списки-словари-множества&#34;&gt;Списки, словари, множества&lt;/h2&gt;
&lt;p&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:#75715e&#34;&gt;# variant 1:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dict2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dict(dict1)
&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;# variant 2:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dict2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dict1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;copy()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;x &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:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; x[:]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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:#f92672&#34;&gt;import&lt;/span&gt; copy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dict &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&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;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;], &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;]}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;copy_dict &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; copy&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;deepcopy(my_dict)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Взято отсюда: &lt;a href=&#34;https://habrahabr.ru/post/207988/&#34;&gt;Python: вещи, которых вы могли не знать&lt;/a&gt;&lt;/p&gt;</description>
</item>
    
    <item>
<title>Python :: Libs (bookmark)</title>
<link>https://texnolog.org/programming/python-libs/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/python-libs/</guid>
<description>&lt;h2 id=&#34;3d--mesh&#34;&gt;3D / mesh&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/thearn/stl_tools&#34;&gt;stl_tools&lt;/a&gt; - generate STL geometry files from plain text, LaTeX code, and 2D numpy arrays (matrices)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/trimesh/&#34;&gt;trimesh&lt;/a&gt; - import, export, process, analyze and view triangular meshes (Pre-install version: Blender and openSCAD are backends used for boolean operations, Import STEP files as meshes, Import and export 2D or 3D vector paths from/to DXF or SVG files&amp;hellip;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://pymesh.readthedocs.io/en/latest/&#34;&gt;pymesh&lt;/a&gt; - rapid prototyping platform focused on geometry processing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;interactive-visualization-library-for-web&#34;&gt;Interactive visualization library for Web&lt;/h2&gt;
&lt;h3 id=&#34;charthistogram&#34;&gt;Chart/Histogram&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://bokeh.pydata.org&#34;&gt;bokeh&lt;/a&gt; - interactive visualization library&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mpld3.github.io&#34;&gt;mpld3&lt;/a&gt; - Matplotlib in the browser (interactive data visualizations based on D3.js)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://plot.ly/python/&#34;&gt;plotly&lt;/a&gt; - leading open source tools for composing, editing, and sharing interactive data visualization via the Web&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;graphnetwork&#34;&gt;Graph/Network&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/graphistry/pygraphistry&#34;&gt;PyGraphistry&lt;/a&gt; - load big graphs into Graphistry end-to-end GPU visual graph analytics sessions&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://networkx.github.io&#34;&gt;networkx&lt;/a&gt; - complex networks&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://patrickfuller.github.io/jgraph/&#34;&gt;jgraph&lt;/a&gt; - webGL graphs visualization in 3D&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://graph-tool.skewed.de&#34;&gt;graph-tool&lt;/a&gt; - module for manipulation and statistical analysis of graphs (a.k.a. networks)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://etetoolkit.org&#34;&gt;ETE Toolkit&lt;/a&gt; - framework to work with trees&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;dashboard&#34;&gt;Dashboard&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dash.plot.ly/gallery&#34;&gt;dash&lt;/a&gt; - open source python library for creating reactive, web-based applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/stitchfix/pyxley&#34;&gt;pyxley&lt;/a&gt; - python library makes use of the pyxleyJS React components to create Flask-based web applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://pygal.org/en/stable/&#34;&gt;pygal&lt;/a&gt; - Sexy python charting&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ganttprocess-planning&#34;&gt;Gantt/Process planning&lt;/h3&gt;
&lt;h2 id=&#34;debugging&#34;&gt;Debugging&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/memory_profiler&#34;&gt;memory_profiler&lt;/a&gt; - module for monitoring memory usage of a python program&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;monitoring&#34;&gt;Monitoring&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pypi.org/project/psutil/&#34;&gt;psutil&lt;/a&gt; -  system monitoring, profiling and limiting process resources &amp;amp;&amp;amp; management of running processes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;online-editor&#34;&gt;Online-editor&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dillinger.io/&#34;&gt;dillinger.io&lt;/a&gt; - on-line Markdown editor/render&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jsoneditoronline.org/&#34;&gt;jsoneditoronline.org&lt;/a&gt; - on-line JSON Schema visualizer&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://trinket.io/python&#34;&gt;trinket&lt;/a&gt; - Put Interactive Python Anywhere on the Web&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Python :: Pipenv</title>
<link>https://texnolog.org/programming/pipenv/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/pipenv/</guid>
<description>&lt;h2 id=&#34;pipenv&#34;&gt;pipenv&lt;/h2&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;sudo apt install python3-pip
&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;# устанавливаем pipenv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip3 install pipenv
&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;# если будет ошибка &amp;#34;pipenv: команда не найдена&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:#75715e&#34;&gt;# sudo -H pip3 install -U pipenv&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;# создаем каталог для приложения&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir ./env
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ./env/
&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;# узнаем версию python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 --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;&lt;span style=&#34;color:#75715e&#34;&gt;# активируем виртуальное окружение проекта&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipenv --python 3.5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipenv shell
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Использование: &lt;a href=&#34;https://github.com/pypa/pipenv&#34;&gt;github::pipenv&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;vscode&#34;&gt;vscode&lt;/h2&gt;
&lt;p&gt;настройка vscode для ипользования утановленных пакетов в pipenv&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;&lt;span style=&#34;color:#75715e&#34;&gt;# переходим в каталог проекта&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ./env/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipenv shell
&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;#  определяем пути к размещению файлов&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipenv --venv
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; /home/user/.local/share/virtualenvs/env-xMEAE5
&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;# создаем файл конфигурации&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir ./.vscode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch ./.vscode/settings.json
&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;cat settings.json
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;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;&amp;gt;     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;python.pythonPath&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/home/user/.local/share/virtualenvs/env-xMEAE5/bin/python&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt;     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;python.venvPath&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/home/user/.local/share/virtualenvs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;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;
&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;# запук приложения:&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;env&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; home:~/env$  code ./file.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В открывшемя приложении, внизу в левом углу выбираем версию python с которой надо работать (утановленную внутри evn)&lt;/p&gt;</description>
</item>
    
    <item>
<title>Redis</title>
<link>https://texnolog.org/database/redis/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/database/redis/</guid>
<description>&lt;h2 id=&#34;установка&#34;&gt;Установка&lt;/h2&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;sudo apt-get install redis-server
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl start redis
&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;sudo pip3 install redis
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;connect&#34;&gt;connect&lt;/h2&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; redis
&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;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    REDIS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;StrictRedis(host&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;, port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6379&lt;/span&gt;, db&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;, charset&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;, decode_responses&lt;span style=&#34;color:#f92672&#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;    ping &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; REDIS&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ping()
&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;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ConnectionError&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:
&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;#39;error&amp;#39;&lt;/span&gt;, str(e))
&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;# redis по умолчанию работает с 16-ю базами (переключение параметром db = 0..15)&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;# если этого недостаточно, количество баз можно увеличить в redis.conf (параметр databases)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ARTICLE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;StrictRedis(host&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;, port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6379&lt;/span&gt;, db&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;, charset&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;, decode_responses&lt;span style=&#34;color:#f92672&#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;SECTION &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;StrictRedis(host&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;, port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6379&lt;/span&gt;, db&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;, charset&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;, decode_responses&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;set--get&#34;&gt;set / get&lt;/h2&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;redis &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;config[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;REDIS&amp;#39;&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;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article:&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article:3&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article:2&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;400&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;# способ 1 - получить значение по ключу&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article:3&amp;#39;&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;# способ 2 - получить значение по ключу&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(redis[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article:3&amp;#39;&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;# способ 3 - получить значения по шаблону ключа&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; key &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;scan_iter(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;article:*&amp;#39;&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;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\t&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; (key, redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(key)))
&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;# способ 4 - удаление всех пар ключ:значение&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; key &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;scan_iter():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;delete(key)
&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;# способ 5 - удаление всех пар ключ:значение&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; key &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;keys():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;delete(key)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;hash-python-dict&#34;&gt;hash (python-dict)&lt;/h2&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;redis &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;config[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;REDIS&amp;#39;&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;mydict &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;3&amp;#39;&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;33&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;# способ 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hmset(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Dict&amp;#39;&lt;/span&gt;, mydict)
&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;# способ 2&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; k,v &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; mydict&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;    redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hset(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Dict&amp;#39;&lt;/span&gt;, k, v)
&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(redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hgetall(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Dict&amp;#39;&lt;/span&gt;)) &lt;span style=&#34;color:#75715e&#34;&gt;# return all values as string!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;list&#34;&gt;list&lt;/h2&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;redis &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;config[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;REDIS&amp;#39;&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;# добавить &amp;#39;слева/справа&amp;#39; (элементы добавляются, а не заменяются!)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lpush(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rpush(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;d&amp;#39;&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;# добавить словарь (элементы добавляются, а не заменяются!)&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 style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lpush(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;lst)
&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;# удаление &amp;#39;слева/справа&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lpop(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rpop(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&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;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ltrim(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&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;# получить диапазон&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print( redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lindex(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print( redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lrange(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mylist&amp;#39;&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;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) )
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;json&#34;&gt;json&lt;/h2&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;redis &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;config[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;REDIS&amp;#39;&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:#f92672&#34;&gt;import&lt;/span&gt; json
&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; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;d&amp;#39;&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;,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;]}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;json:data&amp;#39;&lt;/span&gt;, json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;dumps(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;unpack &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;loads(redis&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;json:data&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(unpack[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;d&amp;#39;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;дополнительная-литература&#34;&gt;Дополнительная литература&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.programcreek.com/python/example/59413/redis.StrictRedis&#34;&gt;examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://agiliq.com/blog/2015/03/getting-started-with-redis-py/&#34;&gt;getting started with redis-py&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codepolitan.com/bermain-python-dan-redis-menggunakan-redis-py&#34;&gt;best practice !&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://programmerz.ru/questions/8911/how-to-store-a-complex-object-in-redis-using-redis-py-question.html&#34;&gt;questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neitroblog.wordpress.com/2017/01/25/redis-py/&#34;&gt;шпаргалка&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Redis</title>
<link>https://texnolog.org/tags/redis/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/redis/</guid>
<description></description>
</item>
    
    <item>
<title>Systemd</title>
<link>https://texnolog.org/linux/systemd/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/systemd/</guid>
<description>&lt;h2 id=&#34;додаємо-python-скрипт-в-автозавантаження&#34;&gt;Додаємо python-скрипт в автозавантаження&lt;/h2&gt;
&lt;p&gt;Створюємо файл &lt;strong&gt;/etc/systemd/system/test.service&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Unit&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;Description&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;syslog.target
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;multi-user.target
&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:#f92672&#34;&gt;[&lt;/span&gt;Service&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;Type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;simple
&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;#WorkingDirectory=/home/python/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/bin/python3 /home/python/test.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;USER
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;always
&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;#Restart=on-abort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;StandardOutput&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;syslog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;StandardError&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;syslog
&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:#f92672&#34;&gt;[&lt;/span&gt;Install&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;WantedBy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Оновлюємо інформацію systemd:&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;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;sudo systemctl start test.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;sudo systemctl status test.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;sudo systemctl enable test.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Файл сервісу можна зберігати будь-де, а в &lt;strong&gt;/etc/systemd/system&lt;/strong&gt; додавати лише посилання:
&lt;strong&gt;ln -s /home/python/test.service /etc/systemd/system/test.service&lt;/strong&gt;&lt;/p&gt;</description>
</item>
    
    <item>
<title>Tmux</title>
<link>https://texnolog.org/linux/tmux/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/tmux/</guid>
<description>&lt;h2 id=&#34;config&#34;&gt;Config&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/tmux/tmux/wiki&#34;&gt;Tmux&lt;/a&gt; &amp;ndash; свободная консольная утилита-мультиплексор, предоставляющая пользователю доступ к нескольким терминалам в рамках одного экрана.&lt;/p&gt;
&lt;p&gt;Конфигурационный файл &lt;strong&gt;/home/user/.tmux.conf&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
# перечитать конфигурационный файл, c-a r
unbind r
bind r source-file ~/.tmux.conf \; display &#34;Конфиг перезагружен&#34;

# Размер буфера истории
set -g history-limit 10000

# включить прокрутку по shift pgup/pgdn
set -g terminal-overrides &#39;xterm*:smcup@:rmcup@&#39;

# Меняем начальный индекс окон на 1 вместо 0
set -g base-index 1

# Меняем начальный индекс панелей на 1 вместо 0
setw -g pane-base-index 1

# Включаем поддержку мышки (начиная с версии 2.1)
set -g mouse on

# Визуализция активности в других окнах
set -g monitor-activity on
set -g visual-activity on


# Клавиатурные сочетания ------------------------------------------------------

# Меняем стандартный префикс на &amp;lt;C-a&amp;gt;
unbind C-b
set -g prefix C-a

unbind %                      # Выключаем клавишу для горизонтального разбиения окна
bind h split-window -h        # Назначаем h
unbind &#39;&#34;&#39;                    # Тоже самое, только по вертикали
bind v split-window -v        # Назначаем v


# Status Bar -----------------------------------------------------------------

set-option -g status on                # turn the status bar on
set -g status-interval 5               # set update frequencey (default 15 seconds)
set -g status-justify left             # center window list for clarity
# set-option -g status-position top    # position the status bar at top of screen

# left side of status bar
set -g status-left-length 70
set -g status-right-length 60
set -g status-right &#34;#[fg=yellow] %T&#34;


# Цвета  ---------------------------------------------------------------------

# Выставляем 256 цветов по умолчанию
set -g default-terminal &#34;xterm-256color&#34;

# set pane colors - hilight the active pane
set-option -g pane-border-fg colour235 #base02
set-option -g pane-active-border-fg colour240 #base01

# colorize messages in the command line
set-option -g message-bg black #base02
set-option -g message-fg brightred #orange

# set color for status bar
set-option -g status-bg colour235 #base02
set-option -g status-fg yellow #yellow
set-option -g status-attr dim

# set window list colors - red for active and cyan for inactive
set-window-option -g window-status-fg brightblue #base0
set-window-option -g window-status-bg colour236
set-window-option -g window-status-attr dim

set-window-option -g window-status-current-fg brightred #orange
set-window-option -g window-status-current-bg colour236
set-window-option -g window-status-current-attr bright
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Переопределённые клавиатурные сочетания:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Travels</title>
<link>https://texnolog.org/tags/travels/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/travels/</guid>
<description></description>
</item>
    
    <item>
<title>Travels</title>
<link>https://texnolog.org/travels/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/travels/</guid>
<description></description>
</item>
    
    <item>
<title>Web-based terminal emulator</title>
<link>https://texnolog.org/soft/term/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/term/</guid>
<description>&lt;h2 id=&#34;secure-shell&#34;&gt;Secure Shell&lt;/h2&gt;
&lt;p&gt;Эмулятор терминала / SSH-клиент в виде расширения для браузеров на основе Chromium. Для Firefox есть аналог &amp;ndash; &lt;a href=&#34;https://addons.mozilla.org/ru/firefox/addon/firessh/&#34;&gt;FireSSH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Недостатки: порт в настройках приложения должен соответсвовать порту, который слушает ssh-сервер (по умолчанию 22).
Если в организациях все порты, кроме 80, 443, &amp;hellip; закрыты, то для удаленного доступа придется назначать ssh-серверу web-порт.&lt;/p&gt;
&lt;h2 id=&#34;shell-in-a-box&#34;&gt;Shell In A Box&lt;/h2&gt;
&lt;p&gt;shellinabox &amp;ndash; эмулятор терминала, имеет встроенный веб-сервер, работающий как Web-based-SSH клиент на указанном порту (не соответствующему ssh-серверу).
Веб-эмулятор терминала позволяет получить доступ и контролировать Linux-сервер через SSH Shell удаленно, используя AJAX/JavaScript.&lt;/p&gt;</description>
</item>
    
    <item>
<title>Яремче - 2021</title>
<link>https://texnolog.org/travels/hiking/yaremhe/</link>
<pubDate>Mon, 16 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/travels/hiking/yaremhe/</guid>
<description>&lt;h2 id=&#34;trek&#34;&gt;trek&lt;/h2&gt;


&lt;div class=&#34;map&#34;&gt;
    &lt;iframe src=&#34;https://www.google.com/maps/d/embed?mid=1ykKX-A9G2E842HZ407x7R7sc6j-_nrI&amp;ehbc=2E312F&#34;
    width=&#34;100%&#34; height=&#34;450&#34; style=&#34;border:0;&#34; allowfullscreen=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;photo&#34;&gt;photo&lt;/h2&gt;
&lt;p&gt;Маршрут #1: 2021-08-16 | 10км&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Залізничний міст&lt;/li&gt;
&lt;li&gt;Музей &amp;ldquo;Карпати в мініатюрі&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Струмок Багровець&lt;/li&gt;
&lt;li&gt;Водоспад Багровець малий&lt;/li&gt;
&lt;li&gt;Панорама Яремче&lt;/li&gt;
&lt;li&gt;Водоспад Пробій&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_151409.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_151409_hu_5953289c41b4140b.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_153436.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_153436_hu_682abd06bf2bce75.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162022.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162022_hu_c6ecaef89e769e2f.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162044.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162044_hu_613f4d5b3d466461.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162118.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162118_hu_9eee6c13fbff1cc0.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162135.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162135_hu_993132cc1c091354.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162458.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_162458_hu_171bad5b708f612.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_163405.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_163405_hu_2ff5d2750678003d.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_164735.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_164735_hu_8e865d7943cf95ee.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_165122.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_165122_hu_b5cf3718813c0f74.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_171327.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_171327_hu_366fade8a5f9c39e.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_171741.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_171741_hu_163561bc53cabd58.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_172144.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_172144_hu_ff7d14f8f0c8f5e1.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_173932.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_173932_hu_6ff607a57be5d4c.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_180401.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_180401_hu_98d976030d7d068.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_182148.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_182148_hu_54f3b6e4f2028515.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_182320.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek1/IMG_20210816_182320_hu_801dc5f40175011c.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;
&lt;p&gt;Маршрут #2: 2021-08-20 | 7км&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Залізничний міст&lt;/li&gt;
&lt;li&gt;Стежка Довбуша&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_132217.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_132217_hu_d8535ac3092a9317.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_132401.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_132401_hu_f5d9c2745986badc.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_132933.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_132933_hu_470232492827ba84.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133246.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133246_hu_a1c4ae3b2a55db74.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133304.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133304_hu_c729a8543163077f.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133800.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133800_hu_47cb7367dd358911.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133931.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_133931_hu_22082db8a7bc5fc7.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_134059.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_134059_hu_272ec286cf4b89b1.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_134347.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_134347_hu_55381e0591e6d8a5.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_141520.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_141520_hu_638068ea71d6cf73.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_141909.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_141909_hu_caf503977c84d7e7.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_142504.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_142504_hu_4f2b329a8fdadf3b.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_143905.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_143905_hu_c4b9ab90bc0afe4b.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_151033.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_151033_hu_1ee0af8367924326.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_151314.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/hiking/yaremhe/trek2/IMG_20210820_151314_hu_5209aa24fe0a33f0.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;</description>
</item>
    
    <item>
<title>Velo</title>
<link>https://texnolog.org/tags/velo/</link>
<pubDate>Sat, 07 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/velo/</guid>
<description></description>
</item>
    
    <item>
<title>Софіївська Борщагівка - 2021</title>
<link>https://texnolog.org/travels/velo/stav-14/</link>
<pubDate>Sat, 07 Aug 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/travels/velo/stav-14/</guid>
<description>&lt;h2 id=&#34;trek&#34;&gt;trek&lt;/h2&gt;
&lt;p&gt;Маршрут (20км):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Велодоріжка по проспекту Перемоги&lt;/li&gt;
&lt;li&gt;Маленький зоопарк&lt;/li&gt;
&lt;li&gt;Став №14&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;map&#34;&gt;
    &lt;iframe src=&#34;https://www.google.com/maps/d/embed?mid=1GAZPS1t-NH8B3VWjwJjFbRm_wC9I80o&amp;ehbc=2E312F&#34; 
    width=&#34;100%&#34; height=&#34;450&#34; style=&#34;border:0;&#34; allowfullscreen=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;    
&lt;/div&gt;

&lt;h2 id=&#34;photo&#34;&gt;photo&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_175509.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_175509_hu_4bb6eb26471f2e69.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_200415.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_200415_hu_d1b27b42f1a9ac8e.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_201222.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_201222_hu_fd2bb476e6b00a2a.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_202410.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_202410_hu_3b8001ab07a89dbd.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_202622.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/stav-14/images/IMG_20210807_202622_hu_f0f4704bd03a546a.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;</description>
</item>
    
    <item>
<title>main page</title>
<link>https://texnolog.org/</link>
<pubDate>Mon, 26 Jul 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/</guid>
<description></description>
</item>
    
    <item>
<title>Совська балка - 2021</title>
<link>https://texnolog.org/travels/velo/sovki-2021/</link>
<pubDate>Sat, 24 Jul 2021 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/travels/velo/sovki-2021/</guid>
<description>&lt;h2 id=&#34;trek&#34;&gt;trek&lt;/h2&gt;
&lt;p&gt;Маршрут (15км):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Чоколівський бульвар&lt;/li&gt;
&lt;li&gt;вул.Зеленогірська&lt;/li&gt;
&lt;li&gt;вул.Радченка&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;map&#34;&gt;
    &lt;iframe src=&#34;https://www.google.com/maps/d/embed?mid=1LgWfVYMF0Q3pgIvahska9rEB_YxBmFY&amp;ehbc=2E312F&#34; 
    width=&#34;100%&#34; height=&#34;450&#34; style=&#34;border:0;&#34; allowfullscreen=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;photo&#34;&gt;photo&lt;/h2&gt;



&lt;div class=&#34;uk-child-width-1-3@m uk-text-center&#34; uk-grid uk-lightbox=&#34;animation: fade&#34;&gt;


    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_145329.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_145329_hu_20208fcefffc39ed.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150059.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150059_hu_ec23b8e88351ded9.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150210.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150210_hu_5659f6b8685ab97f.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150220.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150220_hu_881bb7008d879fb2.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    



    
    

    
        &lt;div&gt;
            &lt;a class=&#34;uk-inline&#34; href=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150623.jpg&#34; data-caption=&#34;Image&#34;&gt;
                &lt;img src=&#34;https://texnolog.org/travels/velo/sovki-2021/images/IMG_20210724_150623_hu_58f5dc5b2fa0d2ff.jpg&#34; alt=&#34;&#34;&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    


&lt;/div&gt;</description>
</item>
    
    <item>
<title>OrientDB</title>
<link>https://texnolog.org/database/orientdb/</link>
<pubDate>Sat, 16 Sep 2017 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/database/orientdb/</guid>
<description>&lt;h2 id=&#34;установка&#34;&gt;Установка&lt;/h2&gt;
&lt;p&gt;Качаем с &lt;a href=&#34;http://orientdb.com/download/&#34;&gt;http://orientdb.com&lt;/a&gt; архив и распаковываем. Есть следующие варианты работы с базой данных:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OrientDB-консоль: реализуется запуском скрипта &lt;strong&gt;&amp;hellip;/bin/console.sh&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;OrientDB-сервер: реализуется запуском скрипта &lt;strong&gt;&amp;hellip;/bin/server.sh&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&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;&lt;span style=&#34;color:#75715e&#34;&gt;# ./server.sh&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;# http://localhost:2480/database/GratefulDeadConcerts&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;# http://192.168.1.2:2480/database/GratefulDeadConcerts&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;curl -D - -b cookie.txt -u root:passwd   http://192.168.1.2:2480/connect/GratefulDeadConcerts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -D - -b cookie.txt -u root:passwd   http://192.168.1.2:2480/distributed/database/GratefulDeadConcerts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -D - -b cookie.txt -u root:passwd   http://192.168.1.2:2480/class/GratefulDeadConcerts/OFunction
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl  -u root:passwd   http://192.168.1.2:2480/class/GratefulDeadConcerts/OFunction
&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;curl  -u root:passwd   http://192.168.1.2:2480/class/GratefulDeadConcerts/OFunction | python -m json.tool
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install jq
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl  -u root:passwd   http://192.168.1.2:2480/class/GratefulDeadConcerts/OFunction | jq
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;using-curl&#34;&gt;Using curl&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://eax.me/couchdb/&#34;&gt;CouchDB 2.0: краткий обзор&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/MyMedsAndMe/marco_polo/issues/25&#34;&gt;Importing JSON databases through the REST API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;rest-api&#34;&gt;Rest API&lt;/h2&gt;
&lt;p&gt;Create a new database (name pdm):&lt;/p&gt;</description>
</item>
    
    <item>
<title>Конвертація файлів</title>
<link>https://texnolog.org/soft/file_conversion/</link>
<pubDate>Tue, 08 Nov 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/soft/file_conversion/</guid>
<description>&lt;h2 id=&#34;html-to-pdf--google-chrome&#34;&gt;HTML to PDF :: google-chrome&lt;/h2&gt;
&lt;p&gt;Конвертація html-файлів з сss-стилями потребує від програмного забезпечення наявності &lt;a href=&#34;https://en.wikipedia.org/wiki/Browser_engine&#34;&gt;browser engine&lt;/a&gt;, який, власне, і повинен рендерити сторінку, а вже потім відправляти її на друк/конвертацію.&lt;/p&gt;
&lt;p&gt;Друк html-сторінки засобами браузера &lt;strong&gt;google-chrome&lt;/strong&gt; в &lt;strong&gt;headless&lt;/strong&gt; режимі (як локального файлу так і url з мережі):&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;$ google-chrome --headless  --print-to-pdf&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;file.pdf  https://user:password@site.org/page.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;На момент написання статті (google-chrome v106 / ubuntu), під час друку не виконувалось перенесення рисунків на нові сторінки. Тобто один великий рисунок розділявся на частини, кожна з яких розміщувалась на власній сторінці в pdf&lt;/p&gt;</description>
</item>
    
    <item>
<title>Bash</title>
<link>https://texnolog.org/linux/bash/</link>
<pubDate>Mon, 07 Nov 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/bash/</guid>
<description>&lt;h2 id=&#34;очистка-debian-от-файлов-оставшихся-после-удаления-пакетов&#34;&gt;Очистка Debian от файлов, оставшихся после удаления пакетов&lt;/h2&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;dpkg -l | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^rc/ {print $2}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dpkg -l | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^rc/ {print $2}&amp;#39;&lt;/span&gt; | xargs sudo dpkg --purge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Первой строкой смотрим, какие каталоги и файлы настроек не были удалены после выполнения &lt;strong&gt;dpkg &amp;ndash;purge&lt;/strong&gt;.
Второй строкой &amp;ndash; удаляем &amp;ldquo;следы&amp;rdquo; от всех удаленных пакетов&lt;/p&gt;
&lt;h2 id=&#34;управление-пользователями&#34;&gt;Управление пользователями&lt;/h2&gt;
&lt;p&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;deluser  имя_пользователя
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;userdel -r имя_пользователя
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если появляется ошибка типа &lt;strong&gt;userdel: пользователь находится в системе&lt;/strong&gt;, то надо убить все процессы, запущенные от имени пользователя:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Bash</title>
<link>https://texnolog.org/tags/bash/</link>
<pubDate>Mon, 07 Nov 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/tags/bash/</guid>
<description></description>
</item>
    
    <item>
<title>Быстрая настройка OpenVPN</title>
<link>https://texnolog.org/linux/openvpn/</link>
<pubDate>Mon, 07 Nov 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/openvpn/</guid>
<description>&lt;h2 id=&#34;на-сервере&#34;&gt;На сервере&lt;/h2&gt;
&lt;p&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;&lt;span style=&#34;color:#75715e&#34;&gt;# sudo apt-get install openvpn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Редактируем (а если нет, то создаем) файл &lt;strong&gt;/etc/openvpn/openvpn.conf&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dev       tun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifconfig  192.168.0.1 192.168.0.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;port      &lt;span style=&#34;color:#ae81ff&#34;&gt;1194&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;proto     udp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;secret    /etc/openvpn/openvpn.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;comp-lzo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keepalive &lt;span style=&#34;color:#ae81ff&#34;&gt;1&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;ping-timer-rem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;persist-tun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;persist-key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user  nobody
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;daemon
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log-append /var/log/openvpn.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;&lt;span style=&#34;color:#75715e&#34;&gt;# sudo openvpn --genkey --secret /etc/openvpn/openvpn.key&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;# sudo /etc/init.d/openvpn restart&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;на-клиенте&#34;&gt;На клиенте&lt;/h2&gt;
&lt;p&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;&lt;span style=&#34;color:#75715e&#34;&gt;# sudo apt-get install openvpn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Редактируем (а если нет, то создаем) файл &lt;strong&gt;/etc/openvpn/openvpn.conf&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote    46.4.144.240
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dev       tun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifconfig  192.168.0.2 192.168.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;port      &lt;span style=&#34;color:#ae81ff&#34;&gt;1194&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;proto     udp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;secret    /etc/openvpn/openvpn.key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;comp-lzo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;keepalive &lt;span style=&#34;color:#ae81ff&#34;&gt;1&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;ping-timer-rem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;persist-tun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;persist-key
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user  nobody
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;daemon
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;log-append /var/log/openvpn.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Копируем с сервера файл openvpn.key в каталог &lt;strong&gt;/etc/openvpn&lt;/strong&gt; и перезапускаем сервер&lt;/p&gt;</description>
</item>
    
    <item>
<title>Операції з файлами</title>
<link>https://texnolog.org/linux/file_operations/</link>
<pubDate>Mon, 07 Nov 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/file_operations/</guid>
<description>&lt;h2 id=&#34;синхронізація&#34;&gt;Синхронізація&lt;/h2&gt;
&lt;h3 id=&#34;rsync-one-way&#34;&gt;rsync (one-way)&lt;/h3&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;rsync -avh --progress file1 file2
&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;# копіювання з видаленням файлів/каталогів в destination, яких вже немає у source&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;# ключ -P є еквівалент --partial --progress&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -avPh --delete /source/ /destination
&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;# не виконувати копіювання, якщо в destination файл новіший ніж в source&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;# ключ -u або --update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -avuPh --delete /source/ /destination
&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;# копіювання файлів по SSH (по &amp;#34;нестандартному&amp;#34; порту) з дозавантаженням&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -avP --append --progress -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh -p 11111&amp;#34;&lt;/span&gt; /source/ user@server.org:/destination
&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;# попередній перегляд змін (актуально при видаленні)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync --dry-run -avPh --delete /source/ /destination
&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;# у впадку помилки &amp;#34;rsync IO error encountered -- skipping file deletion&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:#75715e&#34;&gt;# або різного розміру каталогів (та кількості файлів) після синхронизації&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -avPh --ignore-errors --delete /source/ /destination
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Якщо при копіюванні каталогу вказати замикаючий слеш, то сам каталог не буде створено, а перепишеться лише його вміст:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Nginx</title>
<link>https://texnolog.org/linux/nginx/</link>
<pubDate>Thu, 03 Nov 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/nginx/</guid>
<description>&lt;h2 id=&#34;обмеження-доcтупу-до-сторінки-сайту&#34;&gt;Обмеження доcтупу до сторінки сайту&lt;/h2&gt;
&lt;p&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;$ printf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;username&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:`openssl passwd -apr1`\n&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; .htpasswd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Перевіряємо зміст файлу: має бути формат &lt;strong&gt;username : hash&lt;/strong&gt; (імена користувачів зберігаються як є, а паролі шифруються).
Більш докладно про формат і можливості &amp;ndash; див. &lt;a href=&#34;http://nginx.org/ru/docs/http/ngx_http_auth_basic_module.html&#34;&gt;Модуль ngx_http_auth_basic_module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Внести зміни в конфігураційний файл web-сервера:&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;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/nginx/site-enable/my-server.conf&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;server &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;    ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    location /hidden_dir &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;        auth_basic &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Restricted&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        auth_basic_user_file /path/to/.htpasswd;
&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:#f92672&#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:#f92672&#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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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;$ sudo /etc/init.d/nginx reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/&#34;&gt;Restricting Access with HTTP Basic Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lyalyuev.info/2016/11/08/htpasswd-for-nginx-without-apache-utils/&#34;&gt;Создаем htpasswd для nginx (без Apache)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.listratenkov.com/kak-nastroit-bazovuju-http-autentifikaciju-na-nginx/&#34;&gt;Как настроить базовую HTTP-аутентификацию на nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lets-encrypt-ssltls-certificates&#34;&gt;Let’s Encrypt SSL/TLS Certificates&lt;/h2&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;sudo apt install snapd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo snap install core; sudo snap refresh core
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo snap install --classic certbot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ln -s /snap/bin/certbot /usr/bin/certbot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo snap set certbot trust-plugin-with-root&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ok
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot --nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot renew --dry-run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://certbot.eff.org/&#34;&gt;certbot.eff.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ruvds.com/ru/helpcenter/kak-obezopasit-nginx-s-lets-encrypt-ubuntu-20-04/&#34;&gt;Как обезопасить Nginx с Let’s Encrypt на Ubuntu 20.04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/&#34;&gt;Using Free Let’s Encrypt SSL/TLS Certificates with NGINX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;fancy-index&#34;&gt;Fancy Index&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Barrowclift/Directory-Theme&#34;&gt;Directory-Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/TheInsomniac/Nginx-Fancyindex-Theme&#34;&gt;NGINX FancyIndex Theme&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
</item>
    
    <item>
<title>Создание chroot-окружения</title>
<link>https://texnolog.org/linux/chroot/</link>
<pubDate>Tue, 06 Sep 2016 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/linux/chroot/</guid>
<description>&lt;p&gt;&lt;strong&gt;chroot&lt;/strong&gt; — операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге  (см. &lt;!-- raw HTML omitted --&gt;wikipedia&lt;!-- raw HTML omitted --&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Все действия ниже выполняются от root!&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;создание-chroot-окружения-на-хост-машине&#34;&gt;Создание chroot-окружения (на хост-машине)&lt;/h2&gt;
&lt;p&gt;Устанавливаем утилиту &lt;strong&gt;debootstrap&lt;/strong&gt;, создаем каталог &lt;strong&gt;/web/chroot&lt;/strong&gt; и устанавливаем в него &lt;strong&gt;debian wheezy&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ apt-get install debootstrap 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir /web/chroot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ debootstrap wheezy /web/chroot hstrongp://hstrongp.debian.net/debian/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Копируем системные файлы:&lt;/p&gt;</description>
</item>
    
    <item>
<title>Python :: PyParsing</title>
<link>https://texnolog.org/programming/pyparsing/</link>
<pubDate>Fri, 30 Jan 2015 00:00:00 +0000</pubDate>
      <author>volodymyr.korenkov@gmail.com (Volodymyr Korenkov)</author>
      <guid>https://texnolog.org/programming/pyparsing/</guid>
<description>&lt;h2 id=&#34;pyparsing--модуль-синтаксического-анализа-для-языка-python&#34;&gt;Pyparsing — модуль синтаксического анализа для языка Python&lt;/h2&gt;
&lt;p&gt;Для языка Python создано достаточно большое количество &lt;a href=&#34;http://nedbatchelder.com/text/python-parsers.html&#34;&gt;синтаксических анализаторов&lt;/a&gt;. В данной статье будет рассмотрен один из них — &lt;a href=&#34;https://github.com/pyparsing/pyparsing&#34;&gt;pyparsing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Подобно регулярным выражениям, последовательность работы с данной библиотекой содержит три этапа:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;определение грамматики исходного текста;&lt;/li&gt;
&lt;li&gt;применение данной грамматики к исходному тексту (как правило это вызов функции parseString или scanString);&lt;/li&gt;
&lt;li&gt;анализ полученных в виде списка результатов.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;постановка-задачи&#34;&gt;Постановка задачи&lt;/h3&gt;
&lt;p&gt;Задача формулируется следующим образом. Практически все &lt;a href=&#34;http://en.wikipedia.org/wiki/Computer-aided_manufacturing&#34;&gt;CAM-системы&lt;/a&gt; результат генерирования траекторий перемещения инструмента,
а также некоторую технологическую информацию, сохраняют в промежуточный формат, который получил обобщенное название &lt;a href=&#34;http://en.wikipedia.org/wiki/Cutter_location&#34;&gt;CLData&lt;/a&gt;.&lt;/p&gt;</description>
</item>
    
  </channel>
</rss>
