<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Note-bag</title>
    <description>все обо всем</description>
    <link>https://vsuh.github.io/</link>
    <atom:link href="https://vsuh.github.io/sitemap.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Fri, 02 Oct 2020 06:09:56 +0000</pubDate>
    <lastBuildDate>Fri, 02 Oct 2020 06:09:56 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>Настройки Ubuntu Desktop 20.04.1</title>
        <description>&lt;h1 id=&quot;настройки-ubuntu-desktop&quot;&gt;Настройки Ubuntu Desktop&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;Пришла пора мне обновить операционку на моём мини-РС. Раньше на нём стояла Ubuntu 18 LTS и я подумал было, что, может появилось что-то более подходящее для моего слабого домашнего недосервера.
Попробовал &lt;a href=&quot;https://elementary.io/ru&quot;&gt;elementary OS&lt;/a&gt; и &lt;a href=&quot;https://mxlinux.org&quot;&gt;MX-19&lt;/a&gt;… И, в итоге,
поставил &lt;a href=&quot;https://help.ubuntu.ru&quot;&gt;Ubuntu 20.04.1 LTS (focal fossa)&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Перед установкой, я выбрал вариант минимальной установки.
Итак, операционка установлена, что дальше?&lt;br /&gt;
Дальше, я установил пакеты: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spotify&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;code&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;htop&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mc&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;firefox&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;net-tools&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssh-server&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remmina&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rygel&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;transmission-daemon&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openvpn-systemd-resolved&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ubuntu-restricted-extras&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libavcodec-extra&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libdvd-pkg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install gnome-tweak-tool&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;настройка-openvpn-клиента&quot;&gt;Настройка openvpn клиента&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;upd: Черт! оказывается, можно установить компонент сетевого менеджера &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install network-manager-openvpn*&lt;/code&gt; и настроить OpenVPN из настроек. В следующий раз попробую..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Доступ в локальную сеть предприятия у нас происходит по VPN. Сетевой бог выдает сотруднику &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ovpn&lt;/code&gt; файл, с его помощью работник и подключается к сети.&lt;br /&gt;
Для того, чтобы заработало разрешенине имен из локальной сети, мне пришлось добавить в ovpn файл следующие строки:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;auth-user-pass /etc/openvpn/.vpn.auth

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
dhcp-option DNS 192.168.3.3
dhcp-option DOMAIN mydomain.local

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Затем, скопировал получившийся файл в каталог &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/openvpn&lt;/code&gt; с именем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mydomain.conf&lt;/code&gt;, создал файл 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/openvpn/.vpn.auth&lt;/code&gt; с именем и паролем от учетной записи в домене и установил права на оба файла &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;600&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После этого проверил работу &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openvpn&lt;/code&gt; запуском команды &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;systemctl start openvpn@mydomain&lt;/code&gt; и, убедившись, что все работает, добавил строчку &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AUTOSTART=mydomain&lt;/code&gt; в файл &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/default/openvpn&lt;/code&gt;
Теперь VPN поднимается сразу при загрузке сервера.&lt;/p&gt;

&lt;h2 id=&quot;внешний-hdd&quot;&gt;Внешний HDD&lt;/h2&gt;

&lt;p&gt;Мой внешний винчестер после загрузки linux монтировался в пользовательское пространство по пути типа, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/media/vsuh/XXXX-XXXXXXXX-XXXXXXX-XXXX-XXXX&lt;/code&gt;. Мне это не понравилось и я добавил в /etc/fstab&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/dev/sdb1	/media/HDD 	ext4 	users,rw,nosuid,nodev,relatime,stripe=8191,uhelper=udisks2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;теперь винт виден всегда по одному и тому же адресу: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/media/HDD&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;переключение-раскладки&quot;&gt;Переключение раскладки&lt;/h2&gt;

&lt;p&gt;В установленной дополнительно программе &lt;strong&gt;gnome-tweaks&lt;/strong&gt; по пути &lt;em&gt;Keyboards &amp;amp; Mouse -&amp;gt; Additional Layout Options -&amp;gt; Switching to another layout&lt;/em&gt; можно выбрать способ переключения раскладки &lt;strong&gt;Ctrl-Shift&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;transmission-daemon&quot;&gt;transmission-daemon&lt;/h2&gt;

&lt;p&gt;см. &lt;a href=&quot;https://wiki.archlinux.org/index.php/OpenVPN#systemd_service_configuration&quot;&gt;мануал&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Для того, чтобы скаченные файлы были сразу доступны мне, пришлось сделать следующее:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Скопировать файлы настроек в домашний каталог:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo cp -R /etc/transmission-daemon /home/user_name/.config/
 sudo chown -R user_name /home/user_name/.config/transmission-daemon
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Изменить значение переменной  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CONFIG_DIR&lt;/code&gt; в файле &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/default/transmission-daemon&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Изменить значение переменной &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;User&lt;/code&gt; в файле сервиса &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/lib/systemd/system/transmission-daemon.service&lt;/code&gt; на &lt;strong&gt;user_name&lt;/strong&gt;&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;я еще менял значения переменных &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;USER&lt;/code&gt; и &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NAME&lt;/code&gt; на свё имя  в файле &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/init.d/transmission-daemon&lt;/code&gt; но, кажется, это не влияет.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;Отредактировать settings.ini под свои вкусы (пароль, белый список, каталоги incomplete и watch)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;keepass&quot;&gt;keepass&lt;/h2&gt;

&lt;p&gt;Для хранения паролей, я везде использую базу keepass 2й версии. Чтобы установить сервер базы паролей, выполняем команду &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install keepassx&lt;/code&gt;.&lt;br /&gt;
Файл с базой лежит в облаке, поэтому дописываем в список источников APT репозитарий dropbox:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo echo &quot;deb http://linux.dropbox.com/ubuntu bionic main&quot; &amp;gt; /etc/apt/sources.list.d/dropbox.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;при обновлении источников пакетов получаем ошибку об отсутствии PGP ключа репозитория &lt;em&gt;FC918B335044912E&lt;/em&gt; регистрируем:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FC918B335044912E
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;и устанавливаем dropbox: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install dropbox&lt;/code&gt;
ии… что-то пошло не так. Установщик gnome потребовал запустить приложение (демон), потом открылась страница входа в аккаунт dropbox в браузере. После входа в аккаунт ничего не происходит.
Продолжаю наблюдение.
Оказывается, демон запустился, создал папку &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/Dropbox&lt;/code&gt; и работает.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;upd: dropbox мне не нравится тем, что допускает не более 3 подключенных к аккакнту устройств - буду переходить в другое облако.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В Firefox устанавливается адд-он &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/?src=search&quot;&gt;KeePassHttp-Connector&lt;/a&gt;, в систему - плагин &lt;strong&gt;KeePassHttp&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install keepass2-plugin-keepasshttp&lt;/code&gt;&lt;br /&gt;
мда.. плагин оказался от родного &lt;strong&gt;keepass2&lt;/strong&gt;, &lt;strong&gt;keepassx&lt;/strong&gt; вообще пока не поддерживает плагины.  Пришлось &lt;strong&gt;keepassx&lt;/strong&gt; снести и установить &lt;strong&gt;keepass2&lt;/strong&gt; (который работает из-под mono).&lt;br /&gt;
Не без танцев, но заработало. В Firefox пароли подставляет.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В автозагрузку (&lt;em&gt;gnome-tweaks&lt;/em&gt; “Startup Applications”)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;onedrive&quot;&gt;OneDrive&lt;/h2&gt;

&lt;p&gt;Как и собирался, переехал с &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dropbox&lt;/code&gt; на &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onedrive&lt;/code&gt;. Для синхронизации с &lt;strong&gt;OneDrive&lt;/strong&gt; установил &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cloudcross&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo 'deb http://download.opensuse.org/repositories/home:/MasterSoft24/xUbuntu_19.10/ /' | sudo tee /etc/apt/sources.list.d/home:MasterSoft24.list
curl -fsSL https://download.opensuse.org/repositories/home:MasterSoft24/xUbuntu_19.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home:MasterSoft24.gpg &amp;gt; /dev/null
sudo apt update
sudo apt install cloudcross
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Создал папку &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/OneDrive&lt;/code&gt; и каждые 4 минуты из крона выполняю строчку:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/bin/ccross  --provider onedrive -p ~/OneDrive  --prefer remote
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;docker&quot;&gt;docker&lt;/h2&gt;

&lt;p&gt;В общем то по &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;мануалу&lt;/a&gt;
и, дополнительно, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;читать про это можно в статье &lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-configure-a-continuous-integration-testing-environment-with-docker-and-docker-compose-on-ubuntu-16-04&quot;&gt;Настройка среды непрерывного интеграционного тестирования с помощью Docker и Docker Compose в Ubuntu 16.04&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;vlc&quot;&gt;vlc&lt;/h2&gt;

&lt;p&gt;Добавляем репозиторий разработчиков  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo add-apt-repository ppa:videolan/stable-daily&lt;/code&gt;
и устанавливаем плеер &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install vlc&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;kodi&quot;&gt;Kodi&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo apt install kodi kodi-pvr-iptvsimple&lt;/code&gt;&lt;br /&gt;
Каналы для PVR https://smarttvnews.ru/apps/iptvchannels.m3u&lt;/p&gt;

</description>
        <pubDate>Tue, 08 Sep 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/09/08/SettingUbuntu.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/09/08/SettingUbuntu.html</guid>
        
        
      </item>
    
      <item>
        <title>Требования работодателей к юниору на собеседовании</title>
        <description>&lt;p&gt;&lt;em&gt;статья честно утащена в закрома c &lt;a href=&quot;https://tproger.ru/articles/what-junior-python-dev-should-know/&quot;&gt;tprogs.ru&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;какое-нужно-образование&quot;&gt;Какое нужно образование?&lt;/h1&gt;
&lt;p&gt;Обычно резюме на Junior Python-разработчика подают выпускники или студенты последних курсов технических и математических специальностей. Профильное дополнительное образование, пройденные курсы на Stepic, Coursera или других платформах станут плюсом к основному образованию. Если вы хотите работать в Data Science, то бонусом будут магистерская степень или аспирантура, наличие публикаций и выступления на конференциях.&lt;/p&gt;

&lt;p&gt;Работодатели иногда готовы брать на junior-позицию кандидатов без соответствующего высшего образования. Для таких соискателей, как правило, проводят дополнительные испытания, внимательнее относятся к тестовому заданию и учебным проектам в портфолио.&lt;/p&gt;

&lt;h1 id=&quot;как-проверяют-опыт-работы&quot;&gt;Как проверяют опыт работы?&lt;/h1&gt;
&lt;p&gt;Обычно опыт работы для начинающих специалистов не обязателен. Но на некоторые вакансии ищут кандидатов с опытом от полугода — года или соискателей, которые прошли стажировку. Если вы нигде не работали, приготовьтесь рассказать про законченные учебные и личные проекты. Личными проектами также интересуются, чтобы проверить заинтересованность кандидата в профессии и его стремление к развитию.&lt;/p&gt;

&lt;p&gt;Завершённые проекты можно опубликовать, например, в личном профиле на &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GitHub&lt;/code&gt; или создать сайт-портфолио. На собеседовании вы сможете рассказать, какая перед вами стояла задача, какие технологии вы выбрали и почему. Дополнительные проекты помогут не только прокачать навыки, но и выделиться среди других кандидатов.&lt;/p&gt;

&lt;h1 id=&quot;какие-soft-skills-пригодятся-в-первую-очередь&quot;&gt;Какие soft skills пригодятся в первую очередь?&lt;/h1&gt;
&lt;p&gt;Помните сериал «Кремниевая долина» и его главного героя Ричарда Хендрикса, CEO «Пегого Дудочника»? Он был отличным программистом, но ему явно не хватало умения общаться с людьми, работать в команде и руководить сотрудниками. На практике одного умения решать поставленные задачи с помощью технических навыков бывает недостаточно, успешность кандидата зависит также от его социальных качеств.
Ответственность, стремление к профессиональному росту, умение управлять рабочим временем и работать в команде — это базовые soft skills, которые нужны практически на любой должности в ИТ-сфере.&lt;/p&gt;

&lt;p&gt;От junior разработчика дополнительно ждут умение быстро осваивать новый материал, вникать в суть задач, понимать требования и быть готовым к рутинным задачам. На собеседованиях junior-специалистов могут спросить: «Как вы относитесь к рутинным задачам?» — потому что их работа часто включает монотонные процессы, не всегда творческая. Работодатель не хочет вас напугать — скорее хочет убедиться в том, что вам не станет скучно на этой позиции через несколько месяцев и вы не захотите уйти. Ответ на такой вопрос можно сформулировать так: «Сейчас подобные задачи для меня — возможность получить опыт, на них я смогу отработать свои навыки, чтобы в будущем браться за более сложную работу».&lt;/p&gt;

&lt;p&gt;На собеседовании также могут спросить, почему вы хотите работать на этой должности и в этой компании. С помощью этого вопроса работодатель пытается понять, подходит ли соискатель компании, а компания — соискателю. Если вам действительно не интересен проект, то работа в нем вряд ли доставит удовольствие, и вряд ли вы принесете пользу компании.&lt;/p&gt;

&lt;p&gt;Изучите перед собеседованием свои будущие задачи, продукты и проекты, с которыми работают в компании, этап развития компании (например, стартап или ИТ-гигант), корпоративную культуру, отзывы сотрудников, местоположение, условия работы. И выберите среди всего то, что вам действительно важно. Это может быть простое «это компания, где я могу полностью реализовать свои компетенции и продолжить карьеру» или «мне кажется, мой опыт отлично подходит под требования» и перечислите ключевые навыки.&lt;/p&gt;

&lt;h1 id=&quot;какие-технические-навыки-необходимы&quot;&gt;Какие технические навыки необходимы?&lt;/h1&gt;
&lt;p&gt;Основное требование — знание языка программирования Python. Но иногда на позицию Python-разработчика рассматривают специалистов с опытом в других популярных языках (например, C++, Java, Go).&lt;/p&gt;

&lt;p&gt;На собеседованиях работодатель может проверить общую ИТ-грамотность, например спросить, как устроен компьютер или как работает интернет. Чаще всего от кандидатов ждут знания алгоритмов и структур данных. В некоторых компаниях есть отдельный этап, или даже несколько этапов отбора, посвященных проверке этого навыка. Про то, зачем разработчику изучать алгоритмы и структуры данных, мы уже писали раньше.&lt;/p&gt;

&lt;p&gt;Также на собеседованиях часто спрашивают про опыт работы с базами данных и фреймворками, понимание принципов многопоточного и асинхронного программирования, умение работать в командной строке.&lt;/p&gt;

&lt;p&gt;Python-разработчиков также ищут под задачи машинного обучения. Поэтому при отборе на позиции, связанные с Data Science, проверяют знание алгоритмов машинного обучения и умение их применять, опыт участия в соревнованиях на Kaggle или в хакатонах. От соискателей ждут знания математики: теории вероятностей, линейной алгебры и математического анализа.&lt;/p&gt;

&lt;h1 id=&quot;что-повторить-перед-собеседованием&quot;&gt;Что повторить перед собеседованием&lt;/h1&gt;
&lt;h2 id=&quot;алгоритмы-и-структуры-данных-без-привязки-к-языку-программирования&quot;&gt;Алгоритмы и структуры данных (без привязки к языку программирования).&lt;/h2&gt;

&lt;p&gt;Желательно знать, как устроены массивы, связные списки, хеш-таблицы, множества, бинарные деревья поиска, графы. Какая сложность (в O-нотации) основных операций при работе с ними. Могут также задать вопросы по базовым алгоритмам. Например, попросить рассказать про основные алгоритмы сортировки, бинарный поиск или способы обхода графов.&lt;/p&gt;

&lt;h2 id=&quot;структуры-данных-в-python&quot;&gt;Структуры данных в Python:&lt;/h2&gt;
&lt;p&gt;примеры применения, различия, преимущества и недостатки. Будьте готовы отвечать на вопросы про числовые типы данных, строки, списки, кортежи, множества и словари. Преимуществом будет знание и опыт применения встроенных в язык структур данных, например, OrderedDict или defaultdict из модуля collections.&lt;/p&gt;

&lt;h2 id=&quot;изменяемые-и-неизменяемые-типы-данных-в-python&quot;&gt;Изменяемые и неизменяемые типы данных в Python:&lt;/h2&gt;
&lt;p&gt;в чём разница между ними, примеры использования. Часто просят просто перечислить изменяемые и неизменяемые типы данных, которые вы знаете. Могут предложить решить задачу и спросить, какой тип или какую структуру данных вы бы выбрали для её решения и почему.&lt;/p&gt;

&lt;h2 id=&quot;декораторы&quot;&gt;Декораторы:&lt;/h2&gt;
&lt;p&gt;что это такое и как они устроены. Могут, например, попросить написать код декоратора для измерения времени работы функции или декоратора с параметром. Полезным будет знание &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functools.wraps&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;контекстные-менеджеры&quot;&gt;Контекстные менеджеры:&lt;/h2&gt;
&lt;p&gt;что это такое и для чего используют. Могут попросить реализовать контекстный менеджер для работы с файлами, аналогичный встроенному &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open()&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;генераторы-и-итераторы&quot;&gt;Генераторы и итераторы:&lt;/h2&gt;
&lt;p&gt;что это такое, для чего они используются, какая между ними разница. Могут, например, попросить написать генератор чётных чисел или чисел Фибоначчи.&lt;/p&gt;

&lt;h2 id=&quot;gil&quot;&gt;GIL:&lt;/h2&gt;
&lt;p&gt;зачем он нужен и как работает. Вопрос на собеседовании может быть такой: «Могут ли в Python одновременно выполняться больше одного потока?» От начинающих специалистов обычно не требуют знаний про GIL, но они могут выгодно выделить вас на фоне других кандидатов.&lt;/p&gt;

&lt;h2 id=&quot;как-устроен-один-из-популярных-фреймворков&quot;&gt;Как устроен один из популярных фреймворков,&lt;/h2&gt;
&lt;p&gt;например Django или Flask. Хорошо, если вы понимаете его сильные и слабые стороны. Могут попросить спроектировать базу данных для приложения, написать несколько запросов с помощью ORM или на чистом SQL.&lt;/p&gt;

&lt;h2 id=&quot;как-работает-интернет&quot;&gt;Как работает интернет:&lt;/h2&gt;
&lt;p&gt;понимание модели/моделей OSI/TCP IP, основных протоколов. Популярный вопрос из этого раздела: «Что происходит, когда в поисковой строке вбиваешь &lt;a href=&quot;google.com&quot;&gt;google.com&lt;/a&gt;?»&lt;/p&gt;

&lt;h2 id=&quot;утилиты-командной-строки&quot;&gt;Утилиты командной строки.&lt;/h2&gt;
&lt;p&gt;Могут попросить рассказать про пять – десять команд, которыми вы чаще всего пользуетесь.&lt;/p&gt;

&lt;h2 id=&quot;потоки-процессы-асинхронное-программирование&quot;&gt;Потоки, процессы, асинхронное программирование.&lt;/h2&gt;
&lt;p&gt;Например, в чём разница между потоком и процессом, или какие способы межпроцессного взаимодействия вы знаете.&lt;/p&gt;

&lt;h2 id=&quot;логические-и-математические-задачи&quot;&gt;Логические и математические задачи:&lt;/h2&gt;
&lt;p&gt;для их решения может понадобиться школьная математика, базовые знания комбинаторики, теории вероятностей, умение работать с числами в разных системах счисления.&lt;/p&gt;

&lt;p&gt;Вряд ли на собеседовании вам зададут вопросы из всех этих разделов. От соискателя на позицию младшего разработчика не ждут, что он верно ответит на все вопросы, скорее, будут смотреть, в правильном ли направлении он думает. Но чем более подготовленными вы будете, тем больше у вас шансов получить желаемую работу.&lt;/p&gt;

&lt;h1 id=&quot;что-почитать-начинающему-python-разработчику&quot;&gt;Что почитать начинающему Python-разработчику&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;«Чистый код: создание, анализ и рефакторинг», Мартин Роберт К.&lt;/strong&gt; «Грязный» код мешает развитию проекта и компании, потому что требует значительных ресурсов на поддержку. В книге много реальных примеров, которые научат отличать плохой код от хорошего. Она пригодится всем начинающим разработчикам, читается легко. Возможно, не всё получится сразу применить на практике, но когда вы столкнётесь с ситуацией, упомянутой в книге, вам будет легче найти решение.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;«Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих», Адитья Бхаргава.&lt;/strong&gt; Думаете, алгоритмы это сложно? Книга убедит вас в обратном. В ней подробно разбирается каждый алгоритм: будет понятно даже ребёнку. Воспроизвести их на любом языке программирования не составит труда.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;«Программируем на Python», Майкл Доусон.&lt;/strong&gt; Автор книги — опытный разработчик. Он помогает освоить фундаментальные принципы на примере создания простых игр. Так вы получите базовые навыки и сможете пополнить портфолио. Для более продвинутых специалистов книга может показаться скучной, главная аудитория — всё-таки начинающие разработчики.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;«Python на практике», Марк Саммерфилд.&lt;/strong&gt; Знания из книги помогут лучше подготовиться к собеседованиям. Подходит начинающим и опытным программистам. В основе четыре темы: повышение элегантности кода с помощью паттернов проектирования, повышение быстродействия с помощью распараллеливания и компиляции Python-программ (Cython), высокоуровневое сетевое программирование и графика.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;«Изучаем Python», «Программируем на Python», «Python. Карманный справочник», Марк Лутц.&lt;/strong&gt; Это несколько книг известного инструктора по Python. Их лучше читать в оригинале. Они помогают восполнить пробелы в знаниях и разобраться в сложных вещах. В «Карманном справочнике» вы найдёте основные сведения о типах данных и операторах, специальных методах, встроенных функциях, которые пригод1ятся при работе с Python.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;«Python. Книга Рецептов», Дэвид Бизли, Брайан К. Джонс.&lt;/strong&gt; Пособие для начинающих и опытных разработчиков, которое поможет создавать легкочитаемый, оптимизированный и поддерживаемый код. 15 глав охватывают основные темы Python, каждая глава содержит конкретные «рецепты» с примерами кода, которые вы сможете использовать в своих проектах.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;«Алгоритмы: построение и анализ», Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн.&lt;/strong&gt; Это справочник и пособие по алгоритмам, которое пригодится и начинающим разработчикам, и сеньорам, и тимлидам. Описания даются на простом языке, главы независимы друг от друга, можно изучать в любом порядке и объёме.&lt;/p&gt;

</description>
        <pubDate>Sat, 25 Jul 2020 12:34:56 +0000</pubDate>
        <link>https://vsuh.github.io/job/python/2020/07/25/python-employer-requirements.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/job/python/2020/07/25/python-employer-requirements.html</guid>
        
        
        <category>job</category>
        
        <category>python</category>
        
      </item>
    
      <item>
        <title>25 сайтов, на которых можно попрограммировать</title>
        <description>&lt;p&gt;&lt;a href=&quot;http://codeforces.com/&quot;&gt;Codeforces&lt;/a&gt; — несомненно самая популярная и известная платформа во всем мире для проведения соревнований на алгоритмику. Кроме крупных контестов сайт зачастую проводит свои «раунды» — участникам даются 5 задач на два часа. Есть система рейтинга, на основе которой участники делятся на два дивизиона. Таким образом, профи не соревнуются с новичками напрямую. Все задачи можно сдать и проверить даже после соревнований. Кроме «раундов» доступны и «тренировки» — задачи с прошедших соревнований публикуются в режиме дорешивания.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.topcoder.com/&quot;&gt;TopCoder&lt;/a&gt; — ненамного отстающая по популярности от Codeforces американская платформа. Примечательна тем, что кроме алгоритмических контестов, которые описывались ранее, на ней проводятся и соревнования по промышленному программированию и марафоны — соревнования с задачами на исследование, для которых нет единого верного алгоритма, а есть лишь ответ, подходящий больше или меньше. На решение таких задач участникам обычно дается одна или две недели.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://acm.timus.ru/&quot;&gt;Timus Online Judge&lt;/a&gt; — русскоязычная (хотя английский язык также поддерживается) платформа, на которой более тысячи задач удачно отсортированы по темам и по сложности. Также тут регулярно проводятся контесты уральского региона, которые, впрочем, не представляют для вас ничего интересного, если только вы не студент УрФУ или другого близлежащего вуза.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.spoj.com/&quot;&gt;SPOJ&lt;/a&gt; — крупный англоязычный сайт с более чем 20000 задачами на абсолютно разные темы: динамическое программирование, графы, структуры данных и т.д. Изредка проводит контесты, которые не представляют интереса, если вы не живете в странах их проведения.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;informatics.mccme.ru&quot;&gt;informatics.mccme.ru&lt;/a&gt; — платформа с множеством теоретических материалов и задач по соответствующим темам. Все очень удобно собрано по категориям и темам. Также содержит большую базу задач с прошедших олимпиад школьников.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.codechef.com/&quot;&gt;CodeChef&lt;/a&gt; — менее крупный аналог Codeforces и TopCoder, тоже с огромным архивом задач и регулярными контестами.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://acmp.ru/&quot;&gt;acmp.ru&lt;/a&gt; — сайт, который будет полезен всем благодаря своему архиву задач, удобно (и по большей части правильно) отсортированному по сложности и темам. Соревнования проводятся, но участвовать в них имеет смысл только школьникам Красноярского края, для которых эта платформа изначально и предназначалась.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://projecteuler.net/&quot;&gt;Project Euler&lt;/a&gt; — сборник 500 задач, которые невозможно решить без знаний математических и геометрических алгоритмов. Иногда используется на собеседованиях для приема на работу, чтобы лучше выяснить алгоритмическую подготовку претендента.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kaggle.com/&quot;&gt;Kaggle&lt;/a&gt; — данная платформа отличается от описанных ранее тем, что тут не проводится алгоритмических соревнований — только задачи на исследование (как в марафонах на вышеприведенном TopCoder). Например, одна из задач, на которой сейчас там проверяют свои умения участники, состоит в распознании написанных вручную цифр. Вот несколько символов, для которых это не так просто, как кажется (прим. авт. — некоторые из них я не смог распознать даже не программно):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.codingame.com/start&quot;&gt;CodinGame&lt;/a&gt; — сайт, на котором программирование и видеоигры сливаются в единое целое. Здесь вы найдете большую коллекцию задач на программирование, оформленных в виде видеоигр. Также тут изредка (раз в два месяца) проводятся контесты, содержащие в себе задачи на оптимизацию и ИИ, победители которых получают ценные призы. А если вы решите много задач, то на вас могут обратить внимание компании, которые набирают на этом сайте работников!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://codecombat.com/&quot;&gt;CodeCombat&lt;/a&gt; будет больше полезен для новичков. Эта платформа наглядно демонстрирует, что обучение программированию — это не так сложно и скучно, как может показаться. Сайт представлен в виде игры, которая разделена на несколько частей, возрастающих по сложности. В каждой части содержится множество задач на те или иные темы, призванные научить программированию с нуля любого человека. Если вы давно мечтали заняться программированием, но никак не находили в себе, обязательно обратите внимание на этот сайт.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.hackerrank.com/&quot;&gt;HackerRank&lt;/a&gt; наоборот будет больше интересен профессионалам, которые уже многое умеют. На этом сайте собрано множество задач на самые разные разделы Computer Science: традиционная алгоритмика, ИИ, машинное обучение и т.д. Если вы решите много задач, то вами могут заинтересоваться работодатели, регуляторно мониторящие эту платформу.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gowrikumar.com/c/index.php&quot;&gt;C Puzzles&lt;/a&gt; — подборка головоломок, специфичный для языка С, со всеми его причудами. Например, дан код, который, по логике, не должен работать, но, тем не менее, он компилируется и даже правильно выполняет свою задачу. Надо понять, почему так? На этой сайте вы сможете приобрести навык отладки программ и чтения кода других.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.codewars.com/&quot;&gt;Codewars&lt;/a&gt; — cборник задач на разные темы, от алгоритмов до шаблонов проектирования.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://leetcode.com/&quot;&gt;LeetCode&lt;/a&gt; — сайт с задачами для подготовки к собеседованиям.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://programmingpraxis.com/&quot;&gt;Programming Praxis&lt;/a&gt; — блог, включающий в себя много интересных задач&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.pythonchallenge.com/&quot;&gt;PythonChallange&lt;/a&gt; — сайт с загадками, возрастающими по сложности. Для их решения необходимо написать программу на Python.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.azspcs.net/&quot;&gt;Al Zimmermann’s Programming Contests&lt;/a&gt; — платформа, на которой раз в полгода проводятся контесты с задачами на исследование и оптимизацию. Интересен тем, что писать программу необязательно — даются только тестовые данные. Ответы можно расчитывать вручную, или просто гадать их на кофейной гуще.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://rubyquiz.com/&quot;&gt;Ruby Quiz&lt;/a&gt; — подборка задач для программистов на Ruby, но решения можно писать и на других языках.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mindcipher.com/&quot;&gt;MindCipher&lt;/a&gt; — сборник занимательных математических и логических задач (в том числе и по программированию).&lt;/p&gt;

&lt;p&gt;Сборник задач для практики от &lt;a href=&quot;http://cppstudio.com/cat/285/&quot;&gt;СppStudio&lt;/a&gt;. Рекомендуется решать на С++, но можно и на других языках.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.checkio.org/&quot;&gt;CheckIO&lt;/a&gt; — сайт с задачами для программистов всех уровней, оформленный в виде игры.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.e-olymp.com/ru/&quot;&gt;E-olimp&lt;/a&gt; — украинская тестирующая система с большим архивом задач.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://empireofcode.com/&quot;&gt;Empire of Code&lt;/a&gt; — сайт для программистов, где необходимо писать код, реализующий стратегию и тактику виртуальных бойцов.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gocode.io/&quot;&gt;Operation Go&lt;/a&gt; — практика написания кода на Go в игровой форме.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://russianaicup.ru/&quot;&gt;Russian AI Cup&lt;/a&gt; — ежегодный контест от mail.ru по разработке ИИ. Участвовать могут все — от школьников до профессионалов. Победителям и призерам так же полагаются крутые призы. Обязательно примите участие, если вы заинтересованы этой темой.&lt;/p&gt;

</description>
        <pubDate>Sat, 25 Jul 2020 07:32:49 +0000</pubDate>
        <link>https://vsuh.github.io/job/python/2020/07/25/python-sites-for-training.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/job/python/2020/07/25/python-sites-for-training.html</guid>
        
        
        <category>job</category>
        
        <category>python</category>
        
      </item>
    
      <item>
        <title>123 задачи с IT-собеседований с разбором решений</title>
        <description>&lt;p&gt;&lt;em&gt;При приеме сотрудника в офис на должность программиста, работодатель испытывает кандидата не только вопросами о навыках, но и всевозможными логическими задачами, IT-кейсами и заданиями по разработке для профессиональных программистов.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;1    Есть однонаправленный список из структур. В нём random указывает на какой-то еще элемент этого же списка. Требуется написать функцию, которая копирует этот список с сохранением структуры (т.е. если в старом списке random первой ноды указывал на 4-ю, в новом списке должно быть то же самое – рандом первой ноды указывает на 4-ю ноду нового списка). O(n), константная дополнительная память + память под элементы нового списка. Нельзя сразу выделить память под все данные одник куском т.е. список должен быть честным, разбросанным по частям, а не единым блоком, как массив.&lt;/p&gt;

&lt;p&gt;2	 Классическая задачка с собеседований в Google. На доске записаны числа, вам нужно ответить на вопрос: какое число идёт дальше?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/YkkjpXHI5bo.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/continue-sequence/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3	 Допустим, вы летите из Москвы во Владивосток, а затем обратно, при полном безветрии. Затем вы совершаете точно такой же перелёт, но на этот раз на протяжении всего перелёта дует постоянный западный ветер: в одну сторону попутный, в обратную — лобовой.&lt;/p&gt;

&lt;p&gt;Как изменится суммарное время перелёта туда-обратно?&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Уменьшится&lt;/li&gt;
  &lt;li&gt;Увеличится&lt;/li&gt;
  &lt;li&gt;Не изменится
&lt;a href=&quot;https://tproger.ru/problems/plane/&quot;&gt;ответ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4	 Что не так в этом отрывке кода на С++?&lt;/p&gt;
&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;operator&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/operator-int/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5	 Задача, которая была популярна в своё время на собеседованиях в Amazon. Мы русифицировали её, но смысл остался тот же. Вам нужно продолжить последовательность.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/7BG1Rq0GTdg.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/ppp-ppk-pkk-pp-and-others/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6	 Как это вычислить, не пользуясь калькулятором? Можете дать приблизительный ответ?
&lt;img src=&quot;/assets/images/20200725/XXeiJs71psg.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/2-64/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7	 «Вас уменьшили до размеров 5-центовой монеты и бросили в блендер. Ваш вес уменьшился так, что плотность вашего тела осталась прежней. Лезвия начнут вращаться через 60 секунд. Ваши действия?»&lt;/p&gt;

&lt;p&gt;Это классическая google-задачка, хороший разбор которой в рунете не так-то просто найти. Мы подготовили его для вас. Абсолютного правильного ответа нет, но есть те, которые явно лучше остальных.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/blender/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8	 Вопрос по С++. Что за ошибка «pure virtual function call»? В какой ситуации она может быть сгенерирована? Предоставьте минимальный код, приводящий к ней.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/pure-virtual-function-call/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9	 В вашем распоряжении 10 тысяч серверов в дата-центре с возможностью удалённого управления и один день, чтобы получить миллион долларов. Что вы для этого сделаете?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/servers/&quot;&gt;ответ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10	 У вас есть аналоговые часы с секундной стрелкой. Сколько раз в день все три стрелки часов накладываются друг на друга?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/vkpXkPgrCQM.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(https://tproger.ru/problems/clock/)&lt;/p&gt;

&lt;p&gt;11	 В чём разница между string и String в C#?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/yG1wPwEobQ0.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/c-sharp-strings/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12	 Вы играете в футбол на пустынном острове и хотите подбросить монетку, чтобы решить, какой команде достанется мяч. Единственная монета, что у вас есть, является гнутой, и поэтому вносит явные искажения в результат при подбрасывании. Как вы тем не менее можете использовать такую монету, чтобы принять справедливое решение?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/unfair-coin/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13	 Cколько мячей для гольфа войдет в школьный автобус?
Для справки: в Национальных стандартах транспотрных средств для школ в США на 1995 год указаны максимальные размеры школьного автобуса и равны 40 футам в длину и 8.5 футам в ширину. Стандартный диаметр мяча для гольфа — 1.69 дюйма с допуском 0.005 дюймов.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/golf-balls-is-school-bus/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14	 Представьте себе вращающийся диск, например DVD. У вас есть в распоряжении черная (Ч) и белая (Б) краски. На краю диска установлен небольшой датчик, который определяет цвет под ним и выдает результат в виде сигнала. Как бы вы раскрасили диск, чтобы было возможно определить направление вращения по показаниям датчика?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/A6Y4czusetc.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Дадим небольшое пояснение к задаче. Первое, что нужно иметь ввиду, это то, что нельзя наблюдать за самим диском. Например, вы сидите в офисе, а диск вращается в закрытой лаборатории. Единственная возможность определить направление вращения — использовать оцифрованные показания датчика, и ничего больше.&lt;/p&gt;

&lt;p&gt;Датчик фиксирует цвет точки в непосредственном месте установки в последовательные моменты времени. Показания представляются в виде «ЧЧЧББ…». Задача сводится к такой раскраске диска, где последовательность показаний отличается при вращении в прямую и в противоположную стороны.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/how-to-paint-the-disk-to-determine-its-spinning-direction/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15	 У вас есть исходный код приложения на языке С, которое аварийно завершается после запуска. После десяти запусков в отладчике вы обнаруживаете, что каждый раз программа падает в разных местах. Приложение однопоточное и использует только стандартную библиотеку С. Какие ошибки могут вызвать падение приложения? Как вы проверите каждую?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/what-mistakes-can-cause-error-in-applications-written-in-c/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;16	 Найдите ошибки в следующем коде.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;%d&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/c-language-code-errors/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;17	 Объясните, что делает этот код.&lt;/p&gt;
&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;–&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/explaination-what-the-following-code-do/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;18	 Дано 100-этажное здание. Если яйцо сбросить с высоты N-го этажа (или с большей высоты), оно разобьется. Если его бросить с любого меньшего этажа, оно не разобьется. У вас есть два яйца. Найдите N за минимальное количество бросков.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/two-egg-hundred-floors/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;19	 Что означает ключевое слово volatile (в С++) и в каких ситуация оно может быть применено? Если даже помните формальное значение, попробуйте привести пример ситуации, где volatile на самом деле будет полезно.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/what-is-the-purpose-of-the-keyword-volatile-in-c/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;20	 У вас есть отсортированная матрица размера MxN. Предложите алгоритм поиска в ней произвольного элемента. Под отсортированной матрицей будем понимать такую матрицу, строки и столбцы которой отсортированы (см. пример).
&lt;img src=&quot;/assets/images/20200725/Re15WLGNZSU.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/algorithm-to-search-an-element-in-a-sorted-array/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;21	 Напишите метод, находящий максимальное из двух чисел, не используя операторы if-else или любые другие операторы сравнения.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/write-a-method-that-finds-the-maximum-of-two-numbers-without-using-if-else-statements-or-any-other-comparison-operators/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;22	 На пустынном шоссе вероятность появления автомобиля за 30-минутный период составляет 0.95. Какова вероятность его появления за 10 минут?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/probability-of-observing-a-car-on-a-deserted-highway/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;23	 Напишите функцию суммирования двух целых чисел без использования «+» и других арифметических операторов.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/write-a-function-summation-of-two-numbers-without-using-the-and-other-arithmetic-operators/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;24	 У вас есть парк из 50 грузовиков. Каждый из них полностью заправлен и может проехать 100 км. Как далеко с их помощью вы можете доставить определенный груз? Что будет, если в вашем распоряжении N грузовиков?&lt;/p&gt;

&lt;p&gt;Не все понимают сразу о чем речь: территориально это место, где нет никаких заправочных станций. Единственное место, где можно здесь найти горючее – это топливные баки грузовиков. Пересесть из грузовика в гибридный легковой автомобиль Prius нельзя. Бросить грузовик без топлива, где бы это ни случилось, и без водителя – в порядке вещей. И единственное, что здесь важно, – доставить как можно дальше ценный груз.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/how-far-a-fleet-of-n-trucks-can-go/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;25	 Опишите алгоритм для нахождения миллиона наименьших чисел в наборе из миллиарда чисел. Память компьютера позволяет хранить весь миллиард чисел. Если придумали какое-либо решение, то оцените его эффективность по времени. Есть ли более эффективное решение?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/find-the-smallest-one-million-numbers-in-one-billion-numbers/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;26	 Напишите метод, который будет подсчитывать количество цифр «2», используемых в десятичной записи целых чисел от 0 до n (включительно). Картинка дана в качестве подсказки к одному из возможных решений.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/89AF2ZU2dT0.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/write-a-method-that-will-count-the-amount-of-numbers-2-int-the-numbers-from-0-to-n-inclusive/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;27	 Где вы будете плыть быстрее — в воде или сиропе?&lt;/p&gt;

&lt;p&gt;Это классическая задача с долгой историей, которую обсуждал в своё время еще Исаак Ньютон. Когда-то она использовалась и на IT-собеседованиях в Google (сейчас — нет). Тем не менее предлагаем вам порассуждать над решением.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/can-you-swim-faster-in-water-or-syrup/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;28	 Напишите методы для умножения, вычитания и деления целых чисел, используя из арифметических операций только оператор суммирования. Язык реализации не важен, об оптимизации скорости работы и использования памяти также можете не особо беспокоиться. Главное, что можно использовать только сложение. В подобных задачах полезно вспомнить суть математических операций.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/methods-implements-divide-multiply-subtract-operations-using-addition/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;29	 Допустим, вы пишете конвейер, в котором 2 потока, используя общий буфер, обрабатывают данные. Поток-producer эти данные создает, а поток-consumer их обрабатывает (Producer–consumer problem). Следующий код представляет собой самую простую модель: с помощью std::thread мы порождаем поток-consumer, a создавать данные мы будем в главном потоке.&lt;/p&gt;

&lt;p&gt;Опустим механизмы синхронизации двух потоков, и обратим внимание на функцию main(). Попробуйте догадаться, что с этим кодом не так, и как его исправить?&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;produce&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// создаем задачу и кладем в очередь&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
 
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;consume&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// читаем данные из очереди и обрабатываем&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
 
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;thread&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;thr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;consume&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// порождаем поток&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;produce&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// создаем данные для обработки&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;thr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// ждем завершения работы функции consume()&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/safe-threads-in-cpp/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;30	 Дано 20 баночек с таблетками. В 19 из них лежат таблетки весом 1 г, а в одной – весом 1.1 г. Даны весы, показывающие точный вес. Как за одно взвешивание найти банку с тяжелыми таблетками?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/logic-problem-for-weights/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;31	 Дана шахматная доска размером 8×8, из которой были вырезаны два противоположных по диагонали угла, и 31 кость домино; каждая кость домино может закрыть два квадратика на поле. Можно ли вымостить костями всю доску? Дайте обоснование своему ответу.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/2Ujg18t9ZCY.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/problem-for-chessboard-and-domino/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;32	 Дан входной файл, содержащий четыре миллиарда целых 32-битных чисел. Предложите алгоритм, генерирующий число, отсутствующее в файле. Имеется 1 Гбайт памяти для этой задачи. Дополнительно: а что если у вас всего 10 Мбайт? Количество проходов по файлу должно быть минимальным.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/algorithm-that-generates-an-integer-that-is-not-in-the-file/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;33	 Предложите алгоритм, генерирующий все корректные комбинации пар круглых скобок. Под корректными комбинациями пар будем понимать правильно открытые и закрытые скобки. На вход подаётся число пар скобок, на выходе должны быть все возможные их комбинации в виде набора строк.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/algorithm-that-displays-all-valid-combinations-of-pairs-of-brackets/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;34	 Вы поставили стакан воды на диск проигрывателя виниловых пластинок и медленно увеличиваете скорость вращения. Что произойдет раньше: стакан сползет в сторону, стакан опрокинется, вода расплескается?&lt;/p&gt;

&lt;p&gt;Этот вопрос задавали ранее на собеседованиях в Apple. При ответе рассмотрите возможные варианты и укажите, от чего зависит ответ, если их несколько.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/glass-of-water-on-a-record-turntable/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;35	 Короткая задачка по С++ в виде вопроса для новичков. Почему деструктор полиморфного базового класса должен объявляться виртуальным? Полиморфным считаем класс, в котором есть хотя бы одна виртуальная функция.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/why-base-class-destructor-must-be-declared-virtual/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;36	 Напишите функцию, меняющую местами значения переменных, не используя временные переменные. Предложите как можно больше вариантов.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/write-a-function-which-swaps-the-values-of-variables-without-temporary-variables/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;37	 Предложите алгоритм поиска в односвязном списке k-го элемента с конца. Список реализован вручную, есть только операция получения следующего элемента и указатель на первый элемент. Алгоритм, по возможности, должен быть оптимален по времени и памяти.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/algorithm-to-find-the-nth-to-last-element-of-a-singly-linked-list/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;38	 Напишите функцию, определяющую количество битов, которые необходимо изменить, чтобы из целого числа А получить целое число B. Числа, допустим, 32-битные, язык любой.&lt;/p&gt;

&lt;p&gt;Это одна из типичных задач на работу с битами, которые любят давать на собеседовании. Если вы никогда с ними не сталкивались, вам будет сложно сразу решить задачу с учётом стрессовой ситуации, поэтому запомните использованные при решении трюки.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/function-to-determine-the-number-of-bits-required-to-convert-number-a-to-b/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;39	 В книге N страниц, пронумерованных как обычно от 1 до N. Если сложить количество цифр, содержащихся в каждом номере страницы, будет 1095. Сколько страниц в книге?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/number-of-pages-in-a-book/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;40	 Задачка по С++, которая, тем не менее, будет полезна и для других языков. Сопоставьте хэш-таблицу и mар из стандартной библиотеки шаблонов (STL). Как организована хэш-таблица? Какая структура данных будет оптимальной для небольших объемов данных?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/a-comparison-of-the-hash-table-and-map-of-the-standard-template-library-stl/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;41	 Разработайте класс, обеспечивающий блокировку так, чтобы предотвратить возникновение &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&quot;&gt;мертвой блокировки&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/write-a-class-that-provides-a-lock-so-as-to-prevent-the-occurrence-of-dead-lock/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;42	 Напишите функцию на С++, выводящую в стандартный поток вывода K последних строк файла. При этом файл очень большой, допустим 50 ГБ, длина каждой строки не превышает 256 символов, а число K &amp;lt; 1000.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/print-the-last-k-lines-of-the-input-file-in-c-plus-plus/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;43	 Дан кусок сыра в форме куба и нож. Какое минимальное количество разрезов потребуется сделать, чтобы разделить этот кусок на 27 одинаковых кубиков? А на 64 кубика? После каждого разреза части можно компоновать как угодно.&lt;/p&gt;

&lt;p&gt;Такую задачку раньше часто давали на собеседованиях, а придумана она была ещё в 1950 году.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/cheese-cube/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;44	 Реализуйте метод, определяющий, является ли одна строка перестановкой другой. Под перестановкой понимаем любое изменение порядка символов. Регистр учитывается, пробелы являются существенными.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/method-to-decide-if-two-strings-are-anagrams-or-not/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;45	 В тёмной комнате вам вручают колоду карт, в которой известное количество карт N лежат рубашкой вверх, а остальные — вниз. Вы не можете видеть карты, но можете их переворачивать. Как вы разделите колоду на две стопки, чтобы в каждой из них было одинаковое число карт, лежащих рубашкой вверх?&lt;/p&gt;

&lt;p&gt;Эта головоломка в своё время была популярна в JP Morgan Chase. Понятное дело, оказавшись в темноте, вы просто достанете сотовый телефон и воспользуетесь экраном как фонариком. Однако эта задачка появилась до эпохи сотовых телефонов, и её можно решить, даже не видя карт.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/playing-cards-in-a-dark-room/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;50	 Реализуйте вручную стек со стандартными функциями push/pop и дополнительной функцией min, возвращающей минимальный элемент стека. Все эти функции должны работать за O(1). Решение оптимизируйте по использованию памяти.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/20200725/fhf58oq74hfo.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tproger.ru/problems/design-a-stack-for-additional-function-min/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Fri, 24 Jul 2020 02:29:23 +0000</pubDate>
        <link>https://vsuh.github.io/job/python/2020/07/24/python-employer-requirements-copy.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/job/python/2020/07/24/python-employer-requirements-copy.html</guid>
        
        
        <category>job</category>
        
        <category>python</category>
        
      </item>
    
      <item>
        <title>Установка open-ssh сервера на windows</title>
        <description>&lt;h1 id=&quot;установка&quot;&gt;Установка&lt;/h1&gt;
&lt;p&gt;Для работы с удаленными папками на windows сервере по ssh из VSCode плагином &lt;a href=&quot;https://github.com/Microsoft/vscode-remote-release&quot;&gt;Remote-SSH&lt;/a&gt; на стороне windows сервера требуется служба ssh-сервера. Давайте его установим.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Скачиваем последнюю версию &lt;a href=&quot;https://github.com/PowerShell/Win32-OpenSSH/releases&quot;&gt;дистрибутива OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Сейчас доступна версия v8.0.0.0p1-Beta. Скачиваем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OpenSSH-Win64.zip&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/Aqkwx8NzHbuy71nwBWNhM6TrpRLz4eB8MEq6AxVGQC8Fo3xmuidvXm5vH3wVqydzGaUrkQG9Tloy9qr_Gxvl-VUlcMl1RIWyTlo4VLw7cgvs44TRNdsx9UtSVYeSuiX9PNcqIswDKKg=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Создаем каталог C:\Program Files\OpenSSH и распаковываем в неё содержимое архива.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/LkfWMkwRNsdE31HVtB_vnCheVGuA6YTg5G7LSmpbHcLqF3WW3htK9tq2VgS3LeqnPVHl4idt5C_fJljMPu1EGVelJMEJnQ2X3p-H8H-P5SynuFA_MAYjiQiYJSChNonKWtTdZXdf-m0=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Запускаем powershell от имени администратора.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/v5mWGOaF_DI60iCzzYQVVbxhOwioWIjdR3QteckDlOh6J04u7YLulKkwz1DZ6PJECoJBK368XM3wgUZoDvqFd3_ZRVDhk4riKUR5a_IlssbBzQDM4CRnRMQIwdLrYmLSn50_OTqzkvk=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Выполняем скрипт установки:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cd &quot;\Program Files\OpenSSH&quot;
.\install-sshd.ps1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;sshd and ssh-agent services successfully installed&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если произошла ошибка политики безопасности, то можно выполнить установку так:&lt;/p&gt;

&lt;p&gt;powershell -ExecutionPolicy Bypass -File .\install-sshd.ps1&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/0pYe8rH5nAQSTff5-S4V_8qH4q20jZVOfh2iXzwXQeSj_VETMyh5Fugng3yPcuFRp3wS0VkRAQwyOoi8uvKWuVFKAbyok9MRD08cZSQ9fS2s4yargPHU3vjp0oG6aVTRDbJnqdhyWII=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Генерируем серверные ключи:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.\ssh-keygen.exe -A
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Если при этом появляется ошибка&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/pi-8wjVYghm3340GIYM2r874q8aV0g1Rfcqpu76S2fO_D_p8NKZSfFdESkU4H9UgzPM00R8bWdC8pdvuRI5stRZs7bcOZMuXJUjQ1VEv3nmCktsHreu5AYhOGEx43lTL4nyRDsUGdvQ=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Нужно в папке &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\ProgramData&lt;/code&gt; создать вручную директорию &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Снова пытаемся сгенерировать серверные ключи:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.\ssh-keygen.exe -A
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;На этот раз процедура выполняется успешно.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/3CaMCuR08kDuOelVfLFxsWtcBg5n3gguqUqX2-b79lDiwV1-XY0yJMG2UZLsuHo1P-ltz71CWWIj7FAQnhNOeVjQ6jlbITSnenjiaQ98JQk8ZkCjRAhq5_9Hn-Wsih6-nJUYwjFSfjw=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Настраиваем владельца и права доступа на файлы ключей и каталоги сервера :&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PowerShell -ExecutionPolicy Bypass -File .\FixHostFilePermissions.ps1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;На каждый вопрос отвечаем “A”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/PFWaQRkcrK0BkRn9ftBJvyT6Ck2dyuzw3SzncNdk_dFC6cWkEeaTFCETHZ8VRFZyZa2k7B4NBclwQGSqEj0k8qRj6spdQqMDel1VuFApgnj_zKNVH13g0vzcugSsv_SvtT_CQfPh5ZI=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Открываем 22 порт&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenSSH работает по порту TCP 22. Откроем доступ в Firewall:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/GMIFHo3sFqm2LTeu1G0y-sXZzF9-gVoVdrYK0UVSuRFo4M27mrzRD1IEme_7QYpn-B-XA6MTsAukJTQBGXO7vXkgsQsITM-2pPSZDPBsItyaVvsmi7lu1wlUGIhfMN4B4rCTaTk8Ues=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Эта команда сработает на Windows Server 12 и моложе. На более старых серверах порт можно открыть через GUI в оснастке &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Windows Firewall with Advanced Security&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/0_lFoBoT53_m4eMkbbndsWMcLLd3Rf0k3tDnTioqJ7SCUcX21TiMkNFzym1SpubOmeeH8ElVXYldHO0jy5CB52mcN044TEImfpQK4S8xvJ9wJ3FdQR3gTzUn5tyKDOtd3BHW8AW1sCA=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Запуск службы OpenSSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Открываем список служб:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;services.msc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Находим службу “OpenSSH SSH Server”. В свойствах службы устанавливаем автоматический запуск и запускаем её.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/-sjyvvfmhJfs77QZSGOvjdFDKrA5Nfbbhmu7JNeAJHWHo2TB8_iahf9g-yIChk09AHhdxHj45_zqD_n1g0CCRpz-CyFJTL_2bYx3PdQjXtuhNJJkrK5C62NgkZbuakTEHmPch_6ZuqE=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Проверим что 22 порт работает:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;netstat -tan | find &quot;22&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/IpQNsUaT6VE0vNdyxKp7BfkW4Pg3Xy0sKcPaRSeResHy_bzoH-HsJXVSxsHaThdgM63ylkJedVOKftxJdo-VDaXZzNcj3GK9Qv-NXFyaVCHlJUwM8izIdJ0zCWGjxSrluV9KwHBy8b4=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;22 порт слушается.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Проверка OpenSSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Проверим с помощью WinSCP. Для доменного пользователя используется логин вида domain\username.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/GiF01ivuuqsR2cMZt-LEYkhM4uufnmA2gHI8WOhVqqg3zBf9FTKHSSG7OPI-3LNt5RiQ3v_celajt6_STMuNtSys_rOu4sTxRIU6dSKpzasnlqn8uPWrid95hJGCGjcZohRR2TN6Sg4=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;При первом входе появится окно:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/STV6Hz-I7ay_aZNVUpwtWxq5dZkKYA4Wtwu64rxeowiIxAZznLHzyywtNsewRsro5MsnOoMHTRoPKMABykoA8SsRNaMOCqGkFkND9F7TmMuTYW9P7Qlg3p-OQFOnMtusTj0et3a-Cps=w2400&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;Установка завершена.&lt;/p&gt;

</description>
        <pubDate>Thu, 16 Jul 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/07/16/Install-open-ssh.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/07/16/Install-open-ssh.html</guid>
        
        
      </item>
    
      <item>
        <title>Уведомление об ошибке скрипта</title>
        <description>&lt;h1 id=&quot;отправка-результатов-работы-скрипта-в-telegram&quot;&gt;Отправка результатов работы скрипта в telegram&lt;/h1&gt;

&lt;p&gt;Несколько дней писал и отлаживал скрипт для обновления локальной информационной базы - платформы для разработки обработок и печатных форм.
Скрипт (cmd) должен делать следующее:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;получать значения общих переменных из одного файла настроек &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.ini&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;запускаться поочередно, по алфавиту одним скриптом &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run.bat&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;копировать последний dt файл с сетевого хранилища&lt;/li&gt;
  &lt;li&gt;загрузить dt файл в локальную информационную базу&lt;/li&gt;
  &lt;li&gt;выгрузить из серверной базы конфигурацию в cf файл&lt;/li&gt;
  &lt;li&gt;загрузить конфигурацию из cf файла в локальную информационную базу&lt;/li&gt;
  &lt;li&gt;применить изменения конфигурации&lt;/li&gt;
  &lt;li&gt;установить новый заголовок приложения типа &lt;em&gt;Локальная копия от 24.02.2002 г.&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;отправить уведомление на e-mail и/или в telegram&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;с последним пунктом вышла незадача: &lt;a href=&quot;https://api.telegram.org/&quot;&gt;telegram&lt;/a&gt; с территории нашего предприятия то виден, то не виден, спасибо РКН.
А на современные почтовые сервера и вовсе без поллитры ничего не отправить.&lt;br /&gt;
В результате, почтовое сообщение отправил, формируя и тут же отправляя сообщение &lt;a href=&quot;https://docs.microsoft.com/ru-ru/office/vba/api/outlook.mailitem&quot;&gt;MS Outlook&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Уточнение: при успешном завершении обновления, уведомление как раз не требуется. А вот,в случае возникновения ошибки, ее описание, имя файла в котором произошла ошибка и заголовок процесса с датой и временем начала исполнения должны быть зафиксированы в протоколе и включены в уведомление.
и ещё важно: цепочка скриптов должна прекратиться при возникновении первой ошибки. Дальнейше действия смысла не имеют. Т.о. когда
флаг ошибки взведен, процесс должен прекращаться и сообщение об ошибке отправляться мне.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;language-bat highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;...

&lt;span class=&quot;k&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;:createVBS&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;%vb%&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;%vb%&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;^
&lt;/span&gt;	&lt;span class=&quot;na&quot;&gt;/mailto&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;VSukhikh@gmail.com&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;^
&lt;/span&gt;        &lt;span class=&quot;na&quot;&gt;/Subject&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;%date%&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; обновление mc_bnu_oru&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;^
&lt;/span&gt;        &lt;span class=&quot;na&quot;&gt;/BodyText&lt;/span&gt;:&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;%txt%&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;^
&lt;/span&gt;	&lt;span class=&quot;na&quot;&gt;/Attach&lt;/span&gt;:&lt;span class=&quot;nv&quot;&gt;%temp%&lt;/span&gt;\prt.txt

&lt;span class=&quot;k&quot;&gt;exit&lt;/span&gt;
&lt;span class=&quot;nl&quot;&gt;:createVBS&lt;/span&gt;
&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;nul&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;md&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;Dim&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookApp&lt;/span&gt;		&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;Dim&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookItem&lt;/span&gt;		&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;On&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;Error&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;Resume&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;Next&lt;/span&gt;	&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;Set&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookApp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;GetObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Outlook.Application&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;Set&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookApp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;CreateObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Outlook.Application&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;Set&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;objNamedArgs&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;WScript&lt;/span&gt;.Arguments.Named          &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;Set&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookItem&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookApp&lt;/span&gt;.CreateItem&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;          &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;With&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;OutLookItem&lt;/span&gt;                                    &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo     .Subject &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;objNamedArgs&lt;/span&gt;.Item&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Subject&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;         &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo     .to &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;objNamedArgs&lt;/span&gt;.Item&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MailTo&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;      	  &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo     .HtmlBody &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;objNamedArgs&lt;/span&gt;.Item&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BodyText&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo     .Attachments.Add &lt;span class=&quot;kd&quot;&gt;objNamedArgs&lt;/span&gt;.Item&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Attach&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo     .Display                                        &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo     .Send                                           &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
@echo &lt;span class=&quot;kd&quot;&gt;End&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;With&lt;/span&gt;                                            &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;/b
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Возникла идея отправлять уведомления через сервис &lt;a href=&quot;https://ifttt.com/maker_webhooks/&quot;&gt;IFTTT&lt;/a&gt;.
Создал там приложение (applet): “Если приходят данные на вебхук &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OBRrefreshing&lt;/code&gt; - отправить их в телеграм”.
&lt;img src=&quot;https://lh3.googleusercontent.com/FbdPxUPeUE4RuShskdpHiJT_80jCNoeZ0kdvLrs9V3Jy4Nkckg-3vw42t63PDL8CtsbOzkGcL06J_foL4CVeOp7_8BHZuZz1fv6ATF3wZZyeDEemWBbk5RQ6FkKvSVq6RvoKcZBesA=w2400&quot; alt=&quot;applet screen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Данные отправляются так:&lt;/p&gt;

&lt;div class=&quot;language-bat highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;value1&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;vm&quot;&gt;%txt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;:#=&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;%out%&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;exist&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;%out%&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;nb&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;-X &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;-H &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;-d &lt;/span&gt;@&lt;span class=&quot;nv&quot;&gt;%out%&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;https://maker.ifttt.com/trigger/OBRrefreshing/with/key/cd7[API-key]KNDEx&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Результат доступен на &lt;a href=&quot;&quot;&gt;github&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Tue, 17 Mar 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/03/17/Notify-to-telegram.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/03/17/Notify-to-telegram.html</guid>
        
        
      </item>
    
      <item>
        <title>Подсветка строк протокола в oscript</title>
        <description>&lt;h1 id=&quot;подсветка-строк-лога&quot;&gt;Подсветка строк лога&lt;/h1&gt;

&lt;p&gt;При использовании библиотеки &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;logos&lt;/code&gt;, как известно, если вызывается метод &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;УстановитьРаскладку&lt;/code&gt;, выводимая на экран строка получается из функции &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ПолучитьФорматированноеСообщение&lt;/code&gt;
В этой функции строки можно раскрасить, в зависимости от уровня протокола:&lt;/p&gt;

&lt;div class=&quot;language-bsl highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   &lt;span class=&quot;k&quot;&gt;Функция&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ПолучитьФорматированноеСообщение&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Знач&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;СобытиеЛога&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Экспорт&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;Если&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ВремяНачалаРаботы&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;Неопределено&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Тогда&lt;/span&gt;
		&lt;span class=&quot;nv&quot;&gt;ВремяНачалаРаботы&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;ТекущаяДата&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;КонецЕсли&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;nv&quot;&gt;УровеньЛога&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;СобытиеЛога&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ПолучитьУровень&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;НаименованиеУровня&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Лев&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;УровниЛога&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;НаименованиеУровня&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;УровеньЛога&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;Сообщение&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;СобытиеЛога&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ПолучитьСообщение&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;ИмяЛога&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;СобытиеЛога&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ПолучитьИмяЛога&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;ИстеклоСекунд&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Окр&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;СобытиеЛога&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ПолучитьВремяСобытия&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ВремяНачалаРаботы&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;Если&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;УровеньЛога&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;или&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;УровеньЛога&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Тогда&lt;/span&gt;
		&lt;span class=&quot;nv&quot;&gt;Подсвет&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&quot;[32;40m&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;ИначеЕсли&lt;/span&gt;  &lt;span class=&quot;nv&quot;&gt;УровеньЛога&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;или&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;УровеньЛога&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;4&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Тогда&lt;/span&gt;
		&lt;span class=&quot;nv&quot;&gt;Подсвет&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&quot;[31;40m&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;Иначе&lt;/span&gt;
		&lt;span class=&quot;nv&quot;&gt;Подсвет&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&quot;[0;0m&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;КонецЕсли&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;Несвет&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&quot;[0;0m&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;ФорматированноеСообщение&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;СтрШаблон&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;%1 %2 - %4%3%5&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Формат&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ld&quot;&gt;'00010101'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ИстеклоСекунд&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&quot;ДФ=HH:mm.ss&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;НаименованиеУровня&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;Сообщение&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;Подсвет&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;Несвет&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;Возврат&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ФорматированноеСообщение&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;КонецФункции&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Если при копировании функции символ &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;эскейп&lt;/code&gt; перед “[” не скопировался, его можно заменить выражением &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Символ(27)&lt;/code&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 06 Mar 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/03/06/LogColoring.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/03/06/LogColoring.html</guid>
        
        
      </item>
    
      <item>
        <title>WSL 1С сервер</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://infostart.ru/public/1187995&quot;&gt;по материалам&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;введение&quot;&gt;Введение&lt;/h1&gt;

&lt;p&gt;Сконфигурируем рабочее место программиста 1С, которое будет состоять из следующих компонентов:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Платформа 1С Предприятие 8 в составе конфигуратора и клиента (Windows)&lt;/li&gt;
  &lt;li&gt;Сервер 1С:Предприятие 8 (Linux)&lt;/li&gt;
  &lt;li&gt;Инструмент администрирования сервера 1С:Предприятие 8 (Windows)&lt;/li&gt;
  &lt;li&gt;Сервер PostgreSQL 11.5 (Linux)&lt;/li&gt;
  &lt;li&gt;Инструмент администрирования сервера PostgreSQL pgAdmin 4 (Windows)&lt;/li&gt;
  &lt;li&gt;Для проверки работоспособности системы загрузим на сервер 1С:Предприятие демонстрационную базу.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Компания 1С гарантирует работу своих продуктов только в следующих дистрибутивах Linux:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;RPM версии дистрибутива Linux (RED HAT PACKAGE MANAGER, семейство систем Linux построенных на базе дистрибутива системы Red Hat)&lt;/li&gt;
  &lt;li&gt;Red Hat Enterprise Linux 7 (отсутствует в Microsoft Store)&lt;/li&gt;
  &lt;li&gt;CentOS 7 (в Microsoft Store имеется платный дистрибутив для WSL)&lt;/li&gt;
  &lt;li&gt;Debian: версии 9 (в Microsoft Store имеется дистрибутив для WSL)&lt;/li&gt;
  &lt;li&gt;Ubuntu: версии 18.04 LTS (в Microsoft Store имеется дистрибутив для WSL)&lt;/li&gt;
  &lt;li&gt;Mint: версии 19 (отсутствует в Microsoft Store)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;подготовка&quot;&gt;Подготовка&lt;/h1&gt;

&lt;h3 id=&quot;windows-10&quot;&gt;Windows 10&lt;/h3&gt;
&lt;p&gt;Вся работа будет происходит в операционной системе Windows 10. Необходима 64-битная версия ОС. Номер сборки требуется 1607 и старше. Вариант Windows не важен. Будет работать и на Prof и на Home.&lt;/p&gt;

&lt;h3 id=&quot;папка-с-локальным-репозиторием&quot;&gt;Папка с локальным репозиторием&lt;/h3&gt;
&lt;p&gt;В системе Windows на диске С: создадим папку &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TMP_C&lt;/code&gt;, которую будем считать локальным репозиторием. Дистрибутивы, которые потребуются для лабораторной работы будем сохранять в этой папке.&lt;/p&gt;

&lt;h3 id=&quot;дистрибутивы&quot;&gt;Дистрибутивы&lt;/h3&gt;
&lt;p&gt;Все скаченные дистрибутивы сохраняем в папку C:\TMP_C&lt;/p&gt;

&lt;p&gt;Сервер 1С:Предприятия (64-bit) для DEB-based Linux-систем скачиваем из репозитория компании 1С &lt;a href=&quot;https://releases.1c.ru/version_files?nick=Platform83&amp;amp;ver=8.3.15.1700&quot;&gt;releases.1c.ru/project/Platform83&lt;/a&gt; &lt;strong&gt;Cервер 1С:Предприятия (64-bit) для DEB-based Linux-систем&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Технологическая платформа 1С:Предприятия (64-bit) для Windows версии 8.3.16.1148 скачиваем из &lt;a href=&quot;https://releases.1c.ru/version_files?nick=Platform83&amp;amp;ver=8.3.15.1700&quot;&gt;того же репозитория&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Дистрибутив СУБД PostgreSQL для Linux x86 (64-bit) одним архивом (DEB) скачиваем из репозитория компании 1С &lt;a href=&quot;https://releases.1c.ru/version_files?nick=AddCompPostgre&amp;amp;ver=11.5-12.1C&quot;&gt;releases.1c.ru/project/AddCompPostgre&lt;/a&gt; Для работы потребуется дистрибутив последней версии&lt;/p&gt;

&lt;p&gt;Зависимости (служебные библиотеки) postgres для Ubuntu 18.04.3-server x86&lt;em&gt;64 от 20.12.2019 находятся в разделе &lt;a href=&quot;https://releases.1c.ru/project/AddCompPostgre&quot;&gt;Дополнительные материалы репозитория PostgreSQL&lt;/a&gt; (_внизу&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;pgAdmin v.4 скачиваем с официального репозитория проекта &lt;a href=&quot;https://www.postgresql.org/ftp/pgadmin/pgadmin4/&quot;&gt;postgresql.org/ftp/pgadmin/pgadmin4/&lt;/a&gt; Требуется версия для Windows версии 4.17&lt;/p&gt;

&lt;h4 id=&quot;включение-wsl&quot;&gt;Включение WSL&lt;/h4&gt;

&lt;p&gt;Для того, чтобы установить Linux требуется включить компоненту Windows под названием &lt;em&gt;Подсистема Windows для Linux&lt;/em&gt;. После включения компоненты потребуется перезагрузить компьютер.&lt;/p&gt;

&lt;p&gt;Управление компонентами находится в Панель управления – Программы – Включение или отключение компонентов Windows.&lt;/p&gt;

&lt;h1 id=&quot;установка-linux&quot;&gt;Установка Linux&lt;/h1&gt;

&lt;h3 id=&quot;план-установки&quot;&gt;План установки:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Установить Linux из магазина приложений Microsoft Store&lt;/li&gt;
  &lt;li&gt;Первый запуск Linux&lt;/li&gt;
  &lt;li&gt;Обновить Linux&lt;/li&gt;
  &lt;li&gt;Установить локаль русского языка&lt;/li&gt;
  &lt;li&gt;Присвоить хосту статический ip адрес&lt;/li&gt;
  &lt;li&gt;Установить необходимые дополнительные пакеты&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;установка-linux-1&quot;&gt;Установка Linux&lt;/h4&gt;
&lt;p&gt;Как писалось выше, дистрибутивы Linux, которые работают под управлением WSL располагаются в магазине приложений Microsoft Store. Устанавливать будем систему Ubuntu 18.04 LTS (Long-term support это продукты с длительным сроком поддержки, например для Ubuntu 18.04 LTS срок поддержки равен 10 лет). В поиске магазина приложений введите ubuntu 18.04 lts и перейдите на страницу установки.&lt;/p&gt;

&lt;p&gt;Далее нажмите кнопку Получить и дождитесь окончания установки.&lt;/p&gt;

&lt;p&gt;Или же скачайте установочный архив с сайта &lt;a href=&quot;https://aka.ms/wsl-ubuntu-1804&quot;&gt;магазина&lt;/a&gt;:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Debian:&lt;/td&gt;
      &lt;td&gt;https://aka.ms/wsl-debian-gnulinux&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ubuntu 18.04:&lt;/td&gt;
      &lt;td&gt;https://aka.ms/wsl-ubuntu-1804&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ubuntu 16.04:&lt;/td&gt;
      &lt;td&gt;https://aka.ms/wsl-ubuntu-1604&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;openSUSE:&lt;/td&gt;
      &lt;td&gt;https://aka.ms/wsl-opensuse-42&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SLES:&lt;/td&gt;
      &lt;td&gt;https://aka.ms/wsl-sles-12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Кали:&lt;/td&gt;
      &lt;td&gt;https://aka.ms/wsl-kali-linux&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://aka.ms/wsl-ubuntu-1804 &lt;span class=&quot;nt&quot;&gt;-O&lt;/span&gt; C:&lt;span class=&quot;se&quot;&gt;\T&lt;/span&gt;MP_C&lt;span class=&quot;se&quot;&gt;\U&lt;/span&gt;buntu.zip
unzip Ubuntu.zip &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; ./Ubuntu
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Или с помощью PowerShell запустите&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nf&quot;&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Uri&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;https://aka.ms/wsl-ubuntu-1804&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-OutFile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;C:/TMP_C/Ubuntu.zip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UseBasicParsing&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Expand-Archive&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;C:/TMP_C/Ubuntu.zip&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;C:/TMP_C/Ubuntu/&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Перейдите в папку &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:/TMP_C/Ubuntu&lt;/code&gt; и запустите &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ubuntu.exe&lt;/code&gt;&lt;/p&gt;

&lt;h4 id=&quot;первый-запуск-linux&quot;&gt;Первый запуск Linux&lt;/h4&gt;
&lt;p&gt;После установки необходимо сделать первый запуск и выполнить указания системы. Linux можно запустить несколькими способами:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Кнопка Пуск -&amp;gt; Ubuntu 18.04 LTS&lt;/li&gt;
  &lt;li&gt;Открытие нового окна терминала в ConEmu с помощью команды {Bash::bash}&lt;/li&gt;
  &lt;li&gt;Команда wsl набранная в командной строке Windows&lt;/li&gt;
  &lt;li&gt;Команда bash набранная в командной строке Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;При первом запуске система закончит свою установку и настройку после чего попросит вас указать имя пользователя и пароль, под которым вы будете работать в Linux.&lt;/p&gt;

&lt;h4 id=&quot;обновление-linux&quot;&gt;Обновление Linux&lt;/h4&gt;
&lt;p&gt;Ubuntu установленная из магазина Microsoft Store имеет номер релиза 20190521 от 08.05.2018г. Рекомендуется перед началом использования обновить Linux на актуальный релиз. Обновления пакетов выполняются от имени суперпользователя. Будем использовать программу apt (advanced packaging tool), которая предназначена для установки, обновления и удаления программ в операционных системах Linux построенных на базе Debian.&lt;/p&gt;

&lt;h5 id=&quot;обновим-информацию-о-последних-версиях-пакетов-установленных-в-системе&quot;&gt;Обновим информацию о последних версиях пакетов установленных в системе&lt;/h5&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;просмотрим-список-пакетов-которые-можно-обновить&quot;&gt;Просмотрим список пакетов, которые можно обновить&lt;/h5&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;apt list –upgradable
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;обновим-все-пакеты-которые-могут-быть-обновлены&quot;&gt;Обновим все пакеты, которые могут быть обновлены&lt;/h5&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo apt upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&quot;установка-локали-ru_ru&quot;&gt;Установка локали ru_RU&lt;/h4&gt;
&lt;p&gt;Локаль locale в Linux примерно соответствует региональным настройкам в Windows 10 и определяет язык, который доступен системе, формат чисел, дат и денежных единиц.&lt;/p&gt;

&lt;p&gt;Список доступных локалей на вашей машине можно получить, используя команду loicale.&lt;/p&gt;

&lt;p&gt;По умолчанию в системе установлена одна локаль.&lt;br /&gt;
Наименование локали состоит из наименования языка en, наименования региона US и наименования кодировки utf8&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ locale -a
en_US.utf8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Для корректной работы платформы 1С:Предприятие требуется русская локализации. Для ее установки воспользуемся пакетом locales&lt;/p&gt;

&lt;h5 id=&quot;команда-конфигурирования-локали&quot;&gt;Команда конфигурирования локали.&lt;/h5&gt;
&lt;h5 id=&quot;требуются-полномочия-суперпользователя&quot;&gt;Требуются полномочия суперпользователя.&lt;/h5&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo dpkg-reconfigure locales
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Настройка этого пакета идет в псевдографическом интерфейсе. На первом экране необходимо выбрать локаль ru_RU.UTF-8 UTF-8 и отметить ее нажатием клавиши пробел. Нажмите Enter для перехода к следующему экрану, где необходимо выбрать локаль по умолчанию ru_RU.UTF-8. Для завершения настройки требуется нажать клавишу Enter и перезагрузить терминал.&lt;/p&gt;

&lt;p&gt;После настройки список установленных в системе локалей расширится&lt;/p&gt;

&lt;h5 id=&quot;после-настройки-стала-доступна-русская-локализация&quot;&gt;После настройки стала доступна русская локализация&lt;/h5&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ locale -a
en_US.utf8
ru_RU.utf8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;статический-ip-адрес-хоста&quot;&gt;Статический IP адрес хоста&lt;/h4&gt;

&lt;p&gt;Для работы с приложениями на сервере Linux нам потребуется зафиксировать IP адрес вашей машины и связать его с именем хоста.&lt;/p&gt;

&lt;p&gt;Настройка маршрутизатора
Компьютер, на котором работает сервер Linux должен иметь постоянный статический адрес. Обычно IP адрес компьютеру выдается сервером DHCP (Dynamic Host Configuration Protocol), который работает на маршрутизаторе. Сервер DHCP не обязан выдавать один и тот же IP адрес компьютеру и чаще всего не выдает. Для того, чтобы у компьютера IP адрес был статическим необходимо настроить маршрутизатор.&lt;/p&gt;

&lt;p&gt;Потребуется:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Определить диапазон IP адресов, которые будет раздавать DHCP сервер, например 192.168.0.100 – 192.168.0.255&lt;/li&gt;
  &lt;li&gt;Добавить в таблицу статических адресов IP адрес и MAC-адрес (Media Access Control) вашего устройства&lt;/li&gt;
  &lt;li&gt;Перезагрузить маршрутизатор и компьютер&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;На маршрутизаторах разных производителей эта операция выполняется по-разному, но инструкцию несложно найти поиском в Интернете по запросу &lt;em&gt;Настройка статического ip на роутере ХХХ&lt;/em&gt;, где ХХХ это модель вашего роутера.&lt;/p&gt;

&lt;p&gt;Как пример статический адрес моего домашнего компьютера 192.168.1.10&lt;/p&gt;

&lt;h4 id=&quot;определение-ip-адреса-и-имени-хоста-на-сервере-linux&quot;&gt;Определение IP адреса и имени хоста на сервере Linux&lt;/h4&gt;
&lt;p&gt;С помощью утилиты &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ipconfig&lt;/code&gt; проверим, что статический IP адрес выдан компьютеру. С помощью команды &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hostname&lt;/code&gt; получим наименование компьютера (хоста), на котором работает сервер Linux.&lt;/p&gt;

&lt;p&gt;Программа ipconfig выводит информацию о сетевом окружении компьютера в том числе IP адрес хоста:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;ifconfig
eth0: &lt;span class=&quot;nv&quot;&gt;flags&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;4163&amp;lt;UP,BROADCAST&amp;gt;  mtu 1500
inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Команда &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hostname&lt;/code&gt; выводит в консоль имя хоста, к которому подключен ваш терминал:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ hostname
PC
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;связывание-ip-адреса-и-имени-хоста&quot;&gt;Связывание IP адреса и имени хоста&lt;/h4&gt;

&lt;p&gt;С сервером &lt;strong&gt;1C:Предприятие&lt;/strong&gt; который будет установлен на Linux сервер мы планируем работать и управлять из под Windows. Для корректной работы в Windows установим соответствие IP адреса и имени хоста. Для этого внесем изменения в фале hosts, который располагается в папке &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%windir%\system32\drivers\etc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Файл hosts это конфигурационный текстовый файл. При помощи текстового редактора ConEmu необходимо добавить в конец файла следующую строку&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IP-address hostname&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Где: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IP-address&lt;/code&gt; статический адрес компьютера, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hostname&lt;/code&gt; имя хоста.&lt;/p&gt;

&lt;p&gt;Например, на моем компьютере в файл hosts добавлена следующая строка:&lt;/p&gt;

&lt;p&gt;192.168.1.10 PC&lt;/p&gt;

&lt;h1 id=&quot;установка-сервера-1спредприятие&quot;&gt;Установка сервера 1С:Предприятие&lt;/h1&gt;
&lt;p&gt;перед началом установки сервера 1С:Предприятие:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Сервер 1С:Предприятие установленный в ОС Linux не проверяет серверный ключ защиты если используется один рабочий процесс и количество клиентских подключений не более 12. Однако, и это важно, компания 1С предоставляя такую техническую возможность не предоставляет юридического разрешения эксплуатировать сервер 1С:Предприятие таким образом. Иными словами для законного использования сервера 1С:Предприятие требуется приобретение лицензии.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;дополнительные-библиотеки&quot;&gt;Дополнительные библиотеки&lt;/h4&gt;
&lt;p&gt;Для корректной работы сервера 1С:Предприятие потребуются следующие библиотеки&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Библиотека&lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Назначение&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;libwebkitgtk-3.0-0&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;webkitgtk-3.0.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libMagickWand-6.Q16&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;ImageMagick требуется для построения диаграмм&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libfontconfig&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для сохранения файлов в формате PDF&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libfreetype6&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для сохранения файлов в формате PDF&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libgsf-1-common&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для работы с файлами в формате XLS&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libglib2.0&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для работы с внешними источниками данных&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;unixodbc&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для работы с внешними источниками данных&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libkrb5-3&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для работы механизма аутентификации&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libgssapi-krb5-2&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Требуется для работы механизма аутентификации&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Требуемые, для работы сервера 1С:Предприятие библиотеки можно установить одним вызовом программы apt. Для этого в качестве параметра необходимо указать список всех библиотек через пробел:&lt;/p&gt;

&lt;p&gt;Установка всех пакетов одной командой:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo apt install libwebkitgtk-3.0-0 libMagickWand-6.Q16 libfontconfig libfreetype6 libgsf-1-common libglib2.0 unixodbc libkrb5-3 libgssapi-krb5-2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;дополнительные-шрифты&quot;&gt;Дополнительные шрифты&lt;/h4&gt;
&lt;p&gt;Для корректной работы платформы 1С:Предприятие потребуется установить дополнительные шрифты и перестроить файл настроек шрифтов.&lt;/p&gt;

&lt;p&gt;Установим дополнительные шрифты:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo apt install ttf-mscorefonts-installer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Утилита fc-cache пересоздает файл &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;./etc/fonts/fonts.conf&lt;/code&gt; в котором находятся настройки шрифтов&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ fc-cache -fv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;установка-сервера-1спредприятие-1&quot;&gt;Установка сервера 1С:Предприятие&lt;/h4&gt;
&lt;p&gt;Ранее мы скачали архив дистрибутива сервера 1С:Предприятия (64-bit) для DEB-based Linux-систем из репозитория компании 1С в свой локальный репозиторий, который как мы договорились располагается в папке C:\TMP_C. Далее требуется извлечь из архива пакеты, предназначенные для установки. Выполним следующие действия в консоли Linux и за одно потренируемся управлять системой.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;В домашней папке пользователя создадим каталог DISTR/1CSRV (дистрибутив сервера 1С). Все дальнейшие манипуляции с архивами и дистрибутивами сервера 1С будем выполнять в этой папке.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ mkdir ~/DISTR/1CSRV/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Скопируем архив deb64_8_3_16_1148.tar.gz из папки C:\TMP_C операционной системы Windows 10 в папку ~/DISTR операционной системы Linux. Обратите внимание, именно здесь проявляется сила подсистемы WSL. ОС Linux доступны все ресурсы нашего компьютера, включая диски и папки Windows.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cp -fi /mnt/c/TMP_C/deb64_8_3_16_1148.tar.gz ~/DISTR/1CSRV/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Распакуем архив deb64_8_3_16_1148.tar.gz с помощью утилиты tar (tape archive)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ tar -xvf ~/DISTR/1CSRV/deb64_8_3_16_1148.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;После подготовительных операций в каталоге DISTR будут находиться пакеты для установки сервера 1С:Предприятия и системы ключевой защиты. 
Следующие пакеты требуется установить в указанной последовательности:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Порядок установки&lt;/th&gt;
      &lt;th&gt;Наименование пакета&lt;/th&gt;
      &lt;th&gt;Назначение пакета&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;1c-enterprise83-common_8.3.16-1148_amd64.deb&lt;/td&gt;
      &lt;td&gt;Пакет содержит общие компоненты «1С:Предприятия»&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;1c-enterprise83-server_8.3.16-1148_amd64.deb&lt;/td&gt;
      &lt;td&gt;Пакет содержит компоненты сервера «1С:Предприятия» и утилита контроля целостности&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;1c-enterprise83-ws_8.3.16-1148_amd64.deb&lt;/td&gt;
      &lt;td&gt;Пакет содержит адаптер для публикации Web-сервисов «1С:Предприятия» на веб-сервере на основе Apache HTTP Server 2.0, 2.2 или 2.4&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Установим пакеты. Для установки пакетов из локального репозитория (из папки на диске) пакетному менеджеру требуется указать полный путь до пакета. Удобно перед установкой пакетов перейти в папку репозитория и тогда можно указывать относительный путь до пакета.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cd ~/DISTR/1CSRV/
user@PC:~/DISTR/1CSRV$
user@PC:~/DISTR/1CSRV$ sudo apt install ./1c-enterprise83-common_8.3.16-1148_amd64.deb ./1c-enterprise83-server_8.3.16-1148_amd64.deb ./1c-enterprise83-ws_8.3.16-1148_amd64.deb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;установка-системы-защиты-hasp-сервера-1спредприятие&quot;&gt;Установка системы защиты HASP сервера 1С:Предприятие&lt;/h4&gt;

&lt;p&gt;Предлагаю самостоятельно ознакомится с инструкцией на сайте its.1c.ru&lt;/p&gt;

&lt;h4 id=&quot;включение-режима-отладки-на-сервере&quot;&gt;Включение режима отладки на сервере&lt;/h4&gt;

&lt;p&gt;Изменим настройки сервера 1С:Предприятие и включим возможность проводить отладку на сервере. Для этого нам потребуется внести изменения в конфигурационный файл сервера srv1cv83, который находится в папке /etc/init.d 
Данную процедуру необходимо сделать до запуска сервиса сервера 1С:Предприятие.
открыть конфигурационный файл srv1cv83 сервера 1С:Предприятие в редакторе nano&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo nano /etc/init.d/srv1cv83
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;С помощью редактора nano в конфигурационном файле нужно установить параметр SRV1CV8_DEBUG.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Так было:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;# 1C:Enterprise server configuration debug mode&lt;br /&gt;
# 0 - default - off                         &lt;br /&gt;
# 1 - on                                    &lt;br /&gt;
#                                            &lt;br /&gt;
#SRV1CV8_DEBUG&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;так стало:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;# 1C:Enterprise server configuration debug mode&lt;br /&gt;
# 0 - default - off&lt;br /&gt;
# 1 - on&lt;br /&gt;
#&lt;br /&gt;
SRV1CV8_DEBUG=1&lt;/p&gt;

&lt;h4 id=&quot;запуск-службы-сервера-1спредприятие&quot;&gt;Запуск службы сервера 1С:Предприятие&lt;/h4&gt;

&lt;p&gt;Сервис сервера 1С:Предприятие называется &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;srv1cv83&lt;/code&gt;. Для того, что бы сервер 1С:Предприятие работал сервис должен быть запущен. Ниже приведены команды управления сервисом:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;проверить статус сервиса&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ service srv1cv83 status
1C:Enterprise 8.3 server status:
Init script: STARTED.
     Ragent: RUNNING.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;запустить сервис&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo service srv1cv83 start
Starting 1C:Enterprise 8.3 server: OK
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;остановить сервис&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo service srv1cv83 stop
Stopping 1C:Enterprise 8.3 server: OK
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;установка-сервера-postgresql&quot;&gt;Установка сервера PostgreSQL&lt;/h4&gt;

&lt;h5 id=&quot;дополнительные-библиотеки-1&quot;&gt;Дополнительные библиотеки&lt;/h5&gt;

&lt;p&gt;Сервер баз данных PostgreSQL требует, чтобы в операционной системе Linux были установлены дополнительные библиотеки или другими словами, зависимости. 
Архив ubuntu_18.04.3_server.x64.tar.gz со всеми необходимыми библиотеками мы заранее скачали в папку Windows C:\TMP_C&lt;/p&gt;

&lt;p&gt;Для удобства создадим в папке DISTR, которая располагается нашей домашней папке каталог SQLDEP (SQL Dependence) и распакуем в него содержимое архива&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cd ~
user@PC:~$ mkdir ~/DISTR/SQLDEP/
user@PC:~$ cp /mnt/c/TMP_C/ubuntu_18.04.3_server.x64.tar.gz ~/DISTR/SQLDEP/
user@PC:~$ cd ~/DISTR/SQLDEP/
user@PC:~/DISTR/SQLDEP$ tar -xvf ~/DISTR/SQLDEP/ubuntu_18.04.3_server.x64.tar.gz
user@PC:~/DISTR/SQLDEP$ ls -l ~/DISTR/SQLDEP/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;В папке ~/DISTR/SQLDEP/ ubuntu 18.04.3-server.x64/ находятся следующие файлы дистрибутивов:&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;libicu55:amd64&lt;/td&gt;
      &lt;td&gt;библиотека интернационализации для Unicode&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;libllvm9:amd64&lt;/td&gt;
      &lt;td&gt;программная инфраструктура для создания компиляторов и сопутствующих им утилит&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;postgresql-client-common&lt;/td&gt;
      &lt;td&gt;менеджер управления клиентамиPostrgeSQL&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;postgresql-common&lt;/td&gt;
      &lt;td&gt;менеджер кластера PostrgeSQL&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ssl-cert&lt;/td&gt;
      &lt;td&gt;оболочка для библиотеки OpenSSL&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Установим эти библиотеки&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cd ~/DISTR/SQLDEP/ubuntu\ 18.04.3-server.x64/
user@PC:~/DISTR/SQLDEP/ubuntu 18.04.3-server.x64$ sudo apt install ./*.deb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;установка-сервера-postgresql-1&quot;&gt;Установка сервера PostgreSQL&lt;/h5&gt;
&lt;p&gt;После установки необходимых библиотек установим сам сервер баз данных. Архив дистрибутива сервера postgresql_11.5_12.1C_amd64_deb.tar.bz2 мы заранее 
скачали в папку Windows C:\TMP_C&lt;/p&gt;

&lt;p&gt;По аналогии с предыдущим шагом создадим в папке DISTR каталог SQL и распакуем в него содержимое архива.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cd ~
user@PC:~$ mkdir ~/DISTR/SQL/
user@PC:~$ cp /mnt/c/TMP_C/postgresql_11.5_12.1C_amd64_deb.tar.bz2 ~/DISTR/SQL/
user@PC:~$ cd ~/DISTR/SQL/
user@PC:~/DISTR/SQL$ tar -xvf ~/DISTR/SQL/postgresql_11.5_12.1C_amd64_deb.tar.bz2
user@PC:~/DISTR/SQL$ ls -l ~/DISTR/SQL/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;В папке ~/DISTR/SQL/postgresql-11.5-12.1C_amd64_deb находятся следующие файлы дистрибутива:&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;libpq5_11.5-12.1C&lt;/td&gt;
      &lt;td&gt;служебная библиотека сервера PostgreSQL для программирования приложений на языке С (сборка компании 1С)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;postgresql-11_11.5-12.1C&lt;/td&gt;
      &lt;td&gt;серверная часть сервера PostgreSQL (сборка компании 1С)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;postgresql-client-11_11.5-12.1C&lt;/td&gt;
      &lt;td&gt;клиентская часть сервера PostgreSQL (сборка компании 1С)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Установим сервер&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cd ~/DISTR/SQL/postgresql-11.5-12.1C_amd64_deb/
user@PC:~/DISTR/SQL/postgresql-11.5-12.1C_amd64_deb$ sudo apt install ./*.deb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;защита-пакетов-от-обновлений&quot;&gt;Защита пакетов от обновлений&lt;/h5&gt;

&lt;p&gt;Платформа 1С:Предприятие работает только с сервером PostgreSQL который собирает компания 1С.&lt;/p&gt;

&lt;p&gt;Платформа 1С:Предприятие не будет работать с сервером PostgreSQL если тот обновиться на оригинальные пакеты от компании Postgres (так называемая ванильная версия). 
Такое может произойти при обновлении системы Linux. 4 пункт Обновление Linux. Для защиты сервера базы данных от неконтролируемого обновления зафиксируем версии дистрибутива&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cd ~
user@PC:~$ sudo apt-mark hold libpq5
user@PC:~$ sudo apt-mark hold postgresql-11
user@PC:~$ sudo apt-mark hold postgresql-client-11
user@PC:~$ apt-mark showhold
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;запуск-и-начальная-настройка-сервера&quot;&gt;Запуск и начальная настройка сервера&lt;/h5&gt;

&lt;p&gt;Только что установленный сервер баз данных требуется запустить. Для этого воспользуемся программой управления сервисами services.&lt;/p&gt;

&lt;p&gt;Проверим текущий статус сервиса PostgreSQL. Видно, что сервис остановлен, а сам сервер баз данных слушает порт 5432.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ service postgresql status
11/main (port 5432): down
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Запустим сервис. Потребуются привилегии суперпользователя&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo service postgresql start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Во время установки сервера PostgreSQL в систему Linux был добавлен пользователь &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres&lt;/code&gt;. В этом легко убедиться, воспользовавшись утилитой вывода в консоль содержимого файлов cat (concatenate)&lt;/p&gt;

&lt;p&gt;Просмотрим содержимое файла passwd, который содержит список всех пользователей системы. Вывод этой команды показан частично.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ cat /etc/passwd
pen:x:1000:1000:,,,:/home/pen:/bin/bash
usr1cv8:x:999:1001:1C Enterprise 8 server launcher:/home/usr1cv8:/bin/sh
postgres:x:113:118:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Все операции с сервером баз данных будем выполнять от имени пользователя &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres&lt;/code&gt;. Перед началом использования сервера SQL необходимо задать пароль этого пользователя. Воспользуемся интерактивным терминалом PostgreSQL psql.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo su postgres
postgres@PC:/home/pen$
postgres@PC:/home/pen$ cd ~
postgres@PC:~$ psql
postgres=#
postgres=# ALTER USER postgres WITH PASSWORD '1111';
ALTER ROLE

postgres=# \q
postgres@PC:~$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Готово, пароль пользователя postgres установлен на “1111”, теперь осталось выйти из этого пользователя и вернуться в нашего стандартного пользователя.&lt;/p&gt;

&lt;p&gt;Выйдем из пользователя postgres с помощью команды &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit&lt;/code&gt;.  Обратите внимание на то как изменилась строка приглашения.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;postgres@PC:~$ exit
user@PC:~$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;установка-оснасток-серверов&quot;&gt;Установка оснасток серверов&lt;/h1&gt;

&lt;h4 id=&quot;установка-оснастки-администрирования-сервера-1спредприятие&quot;&gt;Установка оснастки администрирования сервера 1С:Предприятие&lt;/h4&gt;
&lt;p&gt;Оснастка администрирования работает в &lt;em&gt;Windows 10&lt;/em&gt; и управляет сервером &lt;strong&gt;1C:Предприятие&lt;/strong&gt;, который работает на Linux. 
Оснастка как компонента входит в дистрибутив платформы &lt;strong&gt;1С:Предприятие 8 (х86-64) для Windows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Если оснастка уже установлена, то в программной группе &lt;em&gt;1C:Предприятие 8 (х86-64)&lt;/em&gt; вы увидите программу &lt;em&gt;Администрирование серверов 1С Предприятия x86-64&lt;/em&gt;. 
Если такой программы нет, то ее требуется установить.&lt;/p&gt;

&lt;p&gt;Установить оснастку можно при начальной установке платформы &lt;em&gt;1С:Предприятие 8 (х86-64)&lt;/em&gt; включив компоненту &lt;em&gt;Администрирование сервера 1С Предприятия x86-64&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Если при начальной установке платформы оснастка не была установлена, то можно это сделать позже. Выполните в Windows 10 следующие действия. 
Откройте Параметры системы Windows и далее Установка и удаление программ. Выберите установленный программный продукт &lt;em&gt;1C:Предприятие 8 (х86-64)&lt;/em&gt; 
и нажмите кнопку Изменить. В открывшемся окне Обслуживание программ выберите опцию Изменить и нажмите кнопку Далее. 
В окне Выборочная установка включите установку компоненты Администрирование сервера 1С Предприятия x86-64 и нажмите кнопку Далее. 
Для изменения набора компонент вам потребуется дистрибутив соответствующей версии.&lt;/p&gt;

&lt;h4 id=&quot;установка-pgadmin4&quot;&gt;Установка pgAdmin4&lt;/h4&gt;

&lt;p&gt;Программа pgAdmin4 предназначена для интерактивного управления и администрирования серверов PostgreSQL в системе Windows. Программа работает в браузере.&lt;/p&gt;

&lt;p&gt;Для установки запустите файл инсталляции pgadmin4-4.18-x86.exe, который мы ранее скачали и сохранили в папке &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\TMP_C&lt;/code&gt;. Следуйте шагам установки соглашаясь с рекомендуемыми параметрами.&lt;/p&gt;

&lt;p&gt;После установки оснастка управления сервером PostgreSQL будет находиться в программной группе &lt;strong&gt;pgAdmin 4&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;При запуске она откроется в WEB браузере, который установлен как браузер по умолчанию. При этом сервис &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgresql&lt;/code&gt; в Linux должен работать.
Первым откроется окно для ввода пароля пользователя &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Укажите пароль, который мы установили на этапе настройки сервера. В нашем примере пароль это &lt;em&gt;1111&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Если сервис postgresql не запущен, то при попытке подключится к серверу pgAdmin выдаст сообщение: 
&lt;em&gt;could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host “192.168.1.10” and accepting TCP/IP connections on port 5432?&lt;/em&gt;&lt;/p&gt;

&lt;h4 id=&quot;создание-кластера-серверов&quot;&gt;Создание кластера серверов&lt;/h4&gt;

&lt;p&gt;Сервера установлены и работают. Пора создать кластер серверов 1С:Предприятие.&lt;/p&gt;

&lt;p&gt;Проверим, что сервисы серверов работают. Удобно воспользоваться командой top (table of processes) которая является аналогом диспетчера задач в Linux. 
Среди работающих процессов в колонке COMMAND вы должны увидеть процессы с наименованиями postgres и ragent&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND        
 2700 postgres  20   0  297012  15264   7300 S   1,7  0,0   0:05.67 postgres       
 2438 usr1cv8   20   0  173940  25664  23576 S   0,0  0,0   0:00.37 ragent         
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Что бы выйти из программы top и вернуться в терминал нажмите [Ctrl + C]&lt;/p&gt;

&lt;p&gt;Если сервера остановлены, то запустим их&lt;/p&gt;

&lt;p&gt;Запустим сервис postgresql. Потребуются привилегии суперпользователя&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo service postgresql start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Запустим сервис srv1cv83. Потребуются привилегии суперпользователя&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user@PC:~$ sudo service srv1cv83 start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Дальнейшие операции будут проводиться в Windows в оснастке администрирования серверов 1С:Предприятие.&lt;/p&gt;

&lt;h5 id=&quot;создание-центрального-сервера-1спредприятие&quot;&gt;Создание центрального сервера 1С:Предприятие&lt;/h5&gt;

&lt;p&gt;Кластер серверов состоит из центрального сервера и рабочих серверов. Центральный сервер главная часть кластера. Он один и он обязателен. Рабочие сервера в кластере создаются при необходимости и могут отсутствовать.&lt;/p&gt;

&lt;p&gt;В оснастке на элементе дерева &lt;em&gt;Central 1C:Enterprise 8.3 servers&lt;/em&gt; нажимаем правую кнопку мыши и выбираем команду Создать Центральный сервер 1С:Предприятия 8.3&lt;/p&gt;

&lt;p&gt;В окне Новый центральный сервер заполняем поля:&lt;/p&gt;

&lt;p&gt;Имя. Указываем имя хоста, который связан с IP адресом нашей машины,  В моем случае имя хоста PC
Описание. Понятный комментарий к серверу, например Центральный сервер PC
Поля, Протокол и IP порт не меняем и оставляем значения по умолчанию.&lt;/p&gt;

&lt;h5 id=&quot;создание-кластера-сервера&quot;&gt;Создание кластера сервера&lt;/h5&gt;

&lt;p&gt;Кластер серверов это точка входа к которой подключаются клиенты &lt;strong&gt;1C:Предприятие&lt;/strong&gt;. Кластером серверов управляет центральный сервер.&lt;/p&gt;

&lt;p&gt;В оснастке на элементе дерева Кластеры нажимаем правую кнопку мыши и выбираем команду Создать Кластер.&lt;/p&gt;

&lt;p&gt;В окне Новый кластер заполняем поля:&lt;/p&gt;

&lt;p&gt;Имя кластера. Указываем имя нашего кластера, например PEN-Cluster
Компьютер. Указываем имя компьютера, на котором работает центральный сервер кластера. В нашем примере это PC
IP Порт. Указываем порт по умолчанию для менеджера кластера 1541&lt;/p&gt;

&lt;h5 id=&quot;отключение-ipv6&quot;&gt;Отключение IPv6&lt;/h5&gt;
&lt;p&gt;Необходимо на машине, на которой работает центральный сервер кластера отключить интернет протокол IPv6. Если этого не сделать при работе сервера будут выдаваться сообщения об ошибках.&lt;/p&gt;

&lt;h1 id=&quot;загрузка-демонстрационной-конфигурации&quot;&gt;Загрузка демонстрационной конфигурации&lt;/h1&gt;

&lt;h4 id=&quot;создание-пустой-базы&quot;&gt;Создание пустой базы&lt;/h4&gt;
&lt;p&gt;В системе Windows запустим платформу 1C и создадим новую информационную базу. Создадим информационную базу без конфигурации (пустую) для того, чтобы в дальнейшем загрузить туда демонстрационную базу. Дадим наименование Демонстрационная база. Тип расположения информационной базы на сервере 1С:Предприятия.&lt;/p&gt;

&lt;p&gt;Заполним карточку новой базы:&lt;/p&gt;

&lt;p&gt;Кластер серверов. Укажем имя хоста, на котором работает центральный сервер кластера. В моем примере это PC
Имя информационной базы в кластере. Укажем имя &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DemoDB&lt;/code&gt;
Тип СУБД. Выберем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PostgreSQL&lt;/code&gt;
Сервер баз данных. Укажем имя хоста, на котором работает сервер баз данных. В моем примере это &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PC&lt;/code&gt;
Имя базы данных. Укажем имя &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DemoDB&lt;/code&gt;
Пользователь базы данных. Имя пользователя &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postgres&lt;/code&gt;
Пароль пользователя. Пароль пользователя базы данных нами установлен как &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1111&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Остальные параметры оставим по умолчанию и закончим создание новой базы.&lt;/p&gt;

&lt;h4 id=&quot;загрузка-демонстрационной-базы&quot;&gt;Загрузка демонстрационной базы&lt;/h4&gt;

&lt;p&gt;Перед этим мы сохранили архив с демонстрационной базой, которую предоставляет компания 1С.&lt;/p&gt;

&lt;p&gt;Распакуем архив с демонстрационной базой demodt_8_3_16_1148.zip в папку локального репозитория. В архиве содержится выгрузка информационной базы 1cv8.dt.&lt;/p&gt;

&lt;p&gt;Загрузим выгрузку информационной базы в нашу пустую базу используя конфигуратор.&lt;/p&gt;

&lt;p&gt;Войдем в базу в пользовательском режиме.&lt;/p&gt;

&lt;p&gt;Итак, мы настроили рабочее место программиста на Linux.&lt;/p&gt;

</description>
        <pubDate>Fri, 21 Feb 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/02/21/WSL.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/02/21/WSL.html</guid>
        
        
      </item>
    
      <item>
        <title>spotify</title>
        <description>&lt;h1 id=&quot;spotify&quot;&gt;Spotify&lt;/h1&gt;

&lt;p&gt;Клевый &lt;a href=&quot;https://open.spotify.com&quot;&gt;сервис&lt;/a&gt; стриминга музыки.
В России не работает, к сожалению. Поэтому приходится извращаться.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;upd: в июле 2020 г. наконец то, появился и у нас.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;в-телефоне&quot;&gt;в телефоне&lt;/h3&gt;

&lt;p&gt;Клиент для андроид нужно качать на &lt;a href=&quot;https://4pda.ru/forum/index.php?showtopic=248440&quot;&gt;4pda&lt;/a&gt; лучше ставить 
&lt;a href=&quot;https://4pda.ru/forum/index.php?showtopic=248440&amp;amp;st=31020#entry90237169&quot;&gt;мод&lt;/a&gt;, в нем вырезана реклама. 
Для использования сервиса, нужно зарегистрировать spotify-аккаунт, предварительно запустив
vpn-клиент и зайдя в нем в выбранную страну. Я пробовал Филиппины (самый дешевый премиум) - там мало vpn серверов,
Индонезию, тоже трудный vpn. Я, в конце концов, остановился на Германии и Канаде.
Для телефона использую &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.urbanvpn.android&quot;&gt;Urban VPN&lt;/a&gt; и &lt;a href=&quot;https://4pda.ru/forum/index.php?showtopic=902760&quot;&gt;VPNhub&lt;/a&gt; - не понравился..&lt;/p&gt;

&lt;h3 id=&quot;в-windows&quot;&gt;в windows&lt;/h3&gt;

&lt;p&gt;Простых способов скачать в России Spotify для windows мало. Вот наиболее правильный &lt;a href=&quot;https://spotify.en.uptodown.com/windows&quot;&gt;путь&lt;/a&gt;
Так же, с windows версией замечена проблема: &lt;a href=&quot;https://4pda.ru/forum/index.php?showtopic=248440&amp;amp;view=findpost&amp;amp;p=80314934&quot;&gt;Если у кого из пользователей Windows проблема с последним обновлением спотифай (программа не запускается, не обновляется и вылетает с ошибкой)&lt;/a&gt;
Авторизоваться в первый раз, как я понял, нужно тоже через vpn. Я использую &lt;a href=&quot;https://4pda.ru/forum/index.php?showtopic=248440&amp;amp;view=findpost&amp;amp;p=82912385&quot;&gt;F-Secure Freedom VPN&lt;/a&gt;
там же есть ссылка на &lt;em&gt;Avira Phantom Pro VPN&lt;/em&gt; - можно попробовать, если первая не будет работать.&lt;/p&gt;

&lt;p&gt;Для windows версии spotify есть замечательный &lt;a href=&quot;https://github.com/khanhas/spicetify-cli&quot;&gt;твикер - spicetify&lt;/a&gt; это утилита командной строки, которая лично мне позволила:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;раскрасить UI spotify в мои цвета (custom theme)&lt;/li&gt;
  &lt;li&gt;управлять spotify с клавиатуры (плагин &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keyboardShortcut&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;добавить в spotify приложение Reddit (custom app reddit)&lt;/li&gt;
  &lt;li&gt;навсегда исключить из проигрывания трек или автора (плагин &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trashbin&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/HleKsvz1GL5KdwAl4gYtbc3-PU3ksu2i2UzCQsqqzyrbG3v_CWZxbxmGzbU0obrMKYWNg2j0OEdUDKGc-ayFJZJLsQAARiO6DUD738bl_SUXxxNbL16KzzyThMNw5h9r0EFMyIgz_w=w2400&quot; alt=&quot;spotify&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Иногда возникает необходимость перенести плейлисты из одного музыкального сервиса в другой (spotify, конечно). Перебрав несколько, я выбрал для себя &lt;a href=&quot;https://www.tunemymusic.com/ru/&quot;&gt;tune my music&lt;/a&gt;. Зарегистрировался там как vsuh@kiddy с простецким паролем и радуюсь.
Последний раз, я переносил плейлисты с избранным из одного spotify аккаунта в другой (в связи с появлением сервиса в России). Перено состоялся в два этапа:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;из Spotify в csv файл&lt;/li&gt;
  &lt;li&gt;(заблокировал приложение &lt;em&gt;tune my music&lt;/em&gt; в немецком аккаунте)&lt;/li&gt;
  &lt;li&gt;из csv файла в российский spotify аккаунт&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1200 треков за 10 минут&lt;/p&gt;

</description>
        <pubDate>Thu, 13 Feb 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/02/13/spotify.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/02/13/spotify.html</guid>
        
        
      </item>
    
      <item>
        <title>Зима в Москве</title>
        <description>&lt;p&gt;Зимы в стране становятся все непредсказуемее. Тем приятней посмотреть на истинно зимний вечер на нашем дворе.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/4QImcc72vKObwpc626XNjxiqLwJToRAAgiZ8d6wCX3r9EtXwXj_8qRL2ZmVnPvt2yEgJ7RSm4w7okKlXLOb_kV_mvfVJKnlELr5P3MastuhVQJpdYMWAPuFjOPV7BZbeKstcpgB9mA=w2400&quot; alt=&quot;Сокол&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Зимой в Москве так холодно что даже в помещении приходится  надевать перчатки.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/ZbuoUqMIPvE9ex0NlgSrudQgYYGAN3lr2t82EzbBvj2QMlDouUaJL8TIbmz2AlhUCeX6GxRkz2nHgyVVA8vXEl4MYg_jD8dbxcebpJnhso5cyvSJISeg0zL6w4k5QBcXWiENsoUTWw=w2400&quot; alt=&quot;Морозы&quot; /&gt;&lt;/p&gt;

&lt;p&gt;в зажравшейся Москве не экономят на освещении улиц&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/6yZ9hb0YN8N57RWeCG6UOjAadEpNNnfm5_5jNT9qYD4HtTnDC18OAZBCpkmftIQl3BXpl1qC_4m-TnJiWQemyyh88ONJlTQDka3su26u00OF1EpX6Sjku1gC6Dc3_yP4NTDe2J1otA=w2400&quot; alt=&quot;Фонари&quot; /&gt;&lt;/p&gt;

</description>
        <pubDate>Tue, 11 Feb 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/02/11/mos-winter.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/02/11/mos-winter.html</guid>
        
        
      </item>
    
      <item>
        <title>Шпаргалка по docker</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://github.com/eon01/DockerCheatSheet&quot;&gt;По материалам компании eralabs&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;реестры-и-репозитории-docker&quot;&gt;Реестры и репозитории Docker&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;команда&lt;/th&gt;
      &lt;th&gt;описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; login&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Вход в реестр&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; login localhost:8080&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; logout&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Выход из реестра&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; logout localhost:8080&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; search nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Поиск образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; search nginx – filter stars=3 –no-trunc busybox&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; pull nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Pull (получение из реестра) образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; pull eon01/nginx localhost:5000/myadmin/nginx&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; push eon01/nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Push (загрузка в реестр) образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; push eon01/nginx localhost:5000/myadmin/nginx&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Первые действия с контейнерами&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; create -t -i eon01/infinite –name infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Создание контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; run -it –name infinite -d eon01/infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Первый запуск контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rename infinite infinity&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Переименование контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rm infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; update –cpu-shares 512 -m 300M infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Обновление контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Запуск и остановка контейнеров&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; start nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Запуск остановленного контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; stop nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Остановка&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; restart nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Перезагрузка&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; pause nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Пауза (приостановка всех процессов контейнера)&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; unpause nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Снятие паузы&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; wait nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Блокировка (до остановки контейнера)&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; kill nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Отправка SIGKILL (завершающего сигнала)&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; kill -s HUP nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Отправка другого сигнала&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; attach nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Подключение к существующему контейнеру&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Получение информации о контейнерах&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; ps&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Работающие контейнеры&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; ps -a&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; logs infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Логи контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; inspect infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Информация о контейнере&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; inspect –format ‘{.{ .NetworkSettings.IPAddress }.}’ $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; ps -q)&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; events infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;События контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; port infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Публичные порты&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; top infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Выполняющиеся процессы&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; stats infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Использование ресурсов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; diff infinite&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Изменения в файлах или директориях файловой системы контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Управление образами&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; images&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Список образов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build .&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Создание образов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build github.com/creack/docker-firefox&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build - &amp;lt; Dockerfile&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build - &amp;lt; context.tar.gz&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build -t eon/infinite .&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build -f myOtherdockerfile .&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;curl example.com/remote/dockerfile ! &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; build -f - .&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rmi nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; load &amp;lt; ubuntu.tar.gz&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Загрузка репозитория в tar (из файла или стандартного ввода)&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; load –input ubuntu.tar&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; save busybox &amp;gt; ubuntu.tar&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Сохранение образа в tar-архив&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; history&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Просмотр истории образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; commit nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Создание образа из контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; tag nginx eon01/nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Тегирование образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; push eon01/nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Push (загрузка в реестр) образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Сеть&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network create -d overlay MyOverlayNetwork&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Создание сети&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network create -d bridge MyBridgeNetwork&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network create -d overlay \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –subnet=192.168.0.0/16 \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –subnet=192.170.0.0/16 \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –gateway=192.168.0.100 \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –gateway=192.170.0.100 \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –ip-range=192.168.1.0/24 \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –aux-address=”my-router=192.168.1.5” \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –aux-address=”my-switch=192.168.1.6” \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –aux-address=”my-printer=192.170.1.5” \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;    –aux-address=”my-nas=192.170.1.6” \&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;MyOverlayNetwork&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network rm MyOverlayNetwork&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление сети&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network ls&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Список сетей&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network inspect MyOverlayNetwork&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Получение информации о сети&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network connect MyOverlayNetwork nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Подключение работающего контейнера к сети&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; run -it -d –network=MyOverlayNetwork nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Подключение контейнера к сети при его запуске&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network disconnect MyOverlayNetwork nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Отключение контейнера от сети&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Очистка docker&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rm nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление работающего контейнера&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rm -v nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление контейнера и его тома (volume)&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rm $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; ps -a -f status=exited -q)&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление всех контейнеров со статусом exited&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; container prune&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление всех остановленных контейнеров&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rm &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;!docker ps -a -q&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; container prune –filter “until=24h”&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление контейнеров, остановленных более суток назад&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rmi nginx&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление образа&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; image prune&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление неиспользуемых (dangling) образов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rmi $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; images -f dangling=true -q)&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; image prune -a&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление неиспользуемых (dangling) образов даже с тегами&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rmi $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; images -a -q)&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление всех образов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rmi -f $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; images ! grep “^&lt;none&gt;&quot; ! awk &quot;{print $3}&quot;)&lt;/none&gt;&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление всех образов без тегов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; stop $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; ps -a -q) &amp;amp;&amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; rm $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; ps -a -q)&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Остановка и удаление всех контейнеров&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; volume prune&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление неиспользуемых (dangling) томов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; volume rm $(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; volume ls -f dangling=true -q)&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; volume prune –filter “label!=keep”&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление неиспользуемых (dangling) томов по фильтру&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; network prune&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление неиспользуемых сетей&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; system prune&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Удаление всех неиспользуемых объектов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; system prune –volumes&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;По умолчанию для &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; 17.06.1+ тома не удаляются. Чтобы удалились и они тоже:&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;docker Swarm&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;curl -ssl https://get.docker.com ! bash&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Установка docker Swarm&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; swarm init –advertise-addr 192.168.10.1&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Инициализация Swarm&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; swarm join-token worker&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Подключение рабочего узла (worker) к Swarm&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; swarm join-token manager&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Подключение управляющего узла (manager) к Swarm&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service ls!&lt;em&gt;Список сервисов&lt;/em&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; node ls&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Список узлов&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service create –name vote -p 8080:80 instavote/vote&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Создание сервиса&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service ps&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Список заданий Swarm&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service scale vote=3&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Масштабирование сервиса&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service update –image instavote/vote:movies vote&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Обновление сервиса&lt;/em&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service update –force –update-parallelism 1 –update-delay 30s nginx&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service update –update-parallelism 5–update-delay 2s –image instavote/vote:indent vote&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service update –limit-cpu 2 nginx&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker&lt;/code&gt; service update –replicas=5 nginx&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        <pubDate>Sat, 25 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/01/25/docker.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/01/25/docker.html</guid>
        
        <category>docker</category>
        
        
      </item>
    
      <item>
        <title>Samsung S3 mini</title>
        <description>&lt;p&gt;Самый старый и, соответственно, заслуженый аппарат. С завода аппарат гордился своей новой Android 4.1.2 (Jelly Bean).&lt;/p&gt;

&lt;p&gt;Samsung давно, года с 2005, махнул на него рукой и поэтому штатных обновлений на него нет.
Поэтому на аппарате стоит CyanGenMod с 6 андроидом.&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Очень компактный и удобнолежащий в руке аппарат. Третья аппаратная кнопка под экраном добавляет функциональности. В частности, перевод в режим восстановления происходит при нажатии еще и этой кнопки.&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/6/6a/Samsung_Galaxy_S_III_mini.png&quot; alt=&quot;Samsung galaxy SIII mini&quot; /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Изначально, был оснащен Android 4.1.2 (Jelly Bean).&lt;/p&gt;
</description>
        <pubDate>Wed, 08 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/01/08/Samsung.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/01/08/Samsung.html</guid>
        
        <category>phone</category>
        
        
      </item>
    
      <item>
        <title>Zenfone3</title>
        <description>&lt;h1 id=&quot;asus-zenfone-3-ze552kl&quot;&gt;ASUS Zenfone 3 (ZE552KL)&lt;/h1&gt;
&lt;p&gt;модель ASUS_Z012DA&lt;/p&gt;

&lt;p&gt;Один из лидеров телефоностроения на середину 2016 года ($300). Масса фишек:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Процессор Snapdragon 625 MSM8953 2000 МГц&lt;/li&gt;
  &lt;li&gt;Разъем type-c&lt;/li&gt;
  &lt;li&gt;Аккумулятор 3000 мА&lt;/li&gt;
  &lt;li&gt;Экран 5.5” IPS 1080x1920&lt;/li&gt;
  &lt;li&gt;FM-tuner&lt;/li&gt;
  &lt;li&gt;сканер отпечатков пальцев&lt;/li&gt;
  &lt;li&gt;microSD 128 Гб&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NFC нет(&lt;/p&gt;

&lt;style&gt;
.halfsized {
    height: 50%;
}
&lt;/style&gt;

&lt;table class=&quot;halfsized&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Аппарат получился очень ухватистым, качественным и приятным. Камера долгое время превосходила 6 айфон по качеству снимков.&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://www.asus.com/media/global/gallery/oZVSNqKB77J6LqAY_setting_fff_1_90_end_500.png&quot; alt=&quot;zenfone 3&quot; /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Последнюю прошивку фирма ASUS выпустила в октябре 2018 с 8 андроидом и забила на аппарат.&lt;/p&gt;

&lt;p&gt;Итак, вот что нужно для прошивки аппарата:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;USB драйверы для компьютера&lt;/li&gt;
  &lt;li&gt;ADB/fastboot&lt;/li&gt;
  &lt;li&gt;средство для разблокирования загрузочной записи&lt;/li&gt;
  &lt;li&gt;кастомный загрузчик&lt;/li&gt;
  &lt;li&gt;собственно, файл прошивки&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Mon, 06 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/01/06/ASUS.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/01/06/ASUS.html</guid>
        
        <category>phone</category>
        
        
      </item>
    
      <item>
        <title>Nubia Z17 Lite</title>
        <description>&lt;h1 id=&quot;zte-nubia-z17-lite-nx591j&quot;&gt;ZTE Nubia Z17 Lite (NX591J)&lt;/h1&gt;

&lt;p&gt;Отличный аппарат за свои немалые деньжищщи - 12000. Основной его профит для такой цены - наличие &lt;a href=&quot;https://ru.wikipedia.org/wiki/Near_Field_Communication&quot;&gt;NFC модуля&lt;/a&gt;,
позволяющее оплачивать покупки и записывать билеты на карту “Тройка”.&lt;/p&gt;

&lt;p&gt;Раздел, посвященный этому аппарату на &lt;a href=&quot;https://4pda.ru/forum/index.php?showtopic=913601&quot;&gt;4PDA&lt;/a&gt;, не имеет куратора, поэтому, 
постараюсь самое важное скопипастить сюда.&lt;/p&gt;

</description>
        <pubDate>Sat, 04 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/01/04/Nubia.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/01/04/Nubia.html</guid>
        
        <category>phone</category>
        
        
      </item>
    
      <item>
        <title>Тонкая настройка темы clean-dark</title>
        <description>&lt;h1 id=&quot;цветовой-акцент&quot;&gt;Цветовой акцент&lt;/h1&gt;

&lt;p&gt;Цветовой акцент - это цвет важных элементов страницы таких как ссылки, кнопки, иконки. 
Текущий цветовой акцент &lt;button class=&quot;btn&quot; style=&quot;background-color:#3CA2A2; color:#444444;&quot;&gt; #3CA2A2 &lt;/button&gt; 
В нашей теме имееются и другие предопределенные значения для цветового акцента. см. файл &lt;strong&gt;theme.scss&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote class=&quot;filename&quot;&gt;
  &lt;p&gt;theme.scss&lt;/p&gt;
&lt;/blockquote&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scss&quot; data-lang=&quot;scss&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// Several accent colors, choose one or create your own!&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$accent-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#3CA2A2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// original =)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// $accent-color: #C38FD6;   velvet&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// $accent-color: #8FD6B3;   greenish&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// $accent-color: #35B4DE;   bluish&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// $accent-color: #D2E354;   yellowish&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// $accent-color: #52B54B;   green&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Можете использовать один из них (просто нажмите на кнопку) или определите свой собственный.&lt;/p&gt;

&lt;p&gt;&lt;button class=&quot;btn&quot; style=&quot;background-color:#C38FD6; color:#444444&quot;&gt;#C38FD6&lt;/button&gt;, &lt;button class=&quot;btn&quot; style=&quot;background-color:#8FD6B3; color:#444444&quot;&gt;#8FD6B3&lt;/button&gt;, &lt;button class=&quot;btn&quot; style=&quot;background-color:#35B4DE; color:#444444&quot;&gt;#35B4DE&lt;/button&gt;, &lt;button class=&quot;btn&quot; style=&quot;background-color:#D2E354; color:#444444&quot;&gt;#D2E354&lt;/button&gt;, &lt;button class=&quot;btn&quot; style=&quot;background-color:#52B54B; color:#444444&quot;&gt;#52B54B&lt;/button&gt;.&lt;/p&gt;

&lt;script&gt;
  $('.btn').click(function(){
    var color = $(this).text();
    [].forEach.call($('a'), function(item) {
      item.style.color = color
    })
  })
&lt;/script&gt;

&lt;style&gt;
  .label{
    cursor: default;
    border-radius: 5px;
    padding: 5px 8px;
  }
&lt;/style&gt;

&lt;h1 id=&quot;другие-цвета&quot;&gt;Другие цвета&lt;/h1&gt;

&lt;p&gt;Так как Jekyll поддерживает SASS, то и другие основные цвета темы настраиваются через переменные в том же &lt;strong&gt;theme.scss&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote class=&quot;filename&quot;&gt;
  &lt;p&gt;theme.scss&lt;/p&gt;
&lt;/blockquote&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scss&quot; data-lang=&quot;scss&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$font-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#dddddd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#292929&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$post-panel-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#444&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$footer-background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#292c2f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$note-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#87CEFA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$warning-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#ffff00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h1 id=&quot;фоновое-изображение&quot;&gt;Фоновое изображение&lt;/h1&gt;

&lt;p&gt;Попробуйте еще изменить фон страницы, просто нажав на него.
Подходящий фон можно подобрать на сайте &lt;a href=&quot;https://www.transparenttextures.com/&quot;&gt;transparenttextures.com&lt;/a&gt;.&lt;/p&gt;

&lt;style&gt;
.pattern-list{
    list-style-type: none;
    padding: 0;
}
.pattern{
    height: 100px;
    box-shadow: 0 0 3px 2px rgba(0,0,0,.1);

}
.pattern:hover {
    box-shadow: 0 0 3px 2px rgba(0,0,0,.3);
    transition: box-shadow .2s ease;
    cursor: pointer;
}
.smthg{
    max-width: none !important;
}
.col-sm-6 {
    padding: 5px !important;
}
&lt;/style&gt;

&lt;table width=&quot;100%&quot; border=&quot;0&quot; margin=&quot;0&quot; padding=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/3px-tile.png')&quot; title=&quot;3px-tile.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/asfalt-light.png')&quot; title=&quot;asfalt-light.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/black-linen.png')&quot; title=&quot;black-linen.png&quot;&gt;&lt;/div&gt; 
&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/food.png')&quot; title=&quot;food.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/gplay.png')&quot; title=&quot;gplay.png&quot;&gt;&lt;/div&gt; 
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/green-dust-and-scratches.png')&quot; title=&quot;green-dust-and-scratches.png&quot;&gt;&lt;/div&gt; 
&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/hexellence.png')&quot; title=&quot;hexellence.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/random-grey-variations.png')&quot; title=&quot;random-grey-variations.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/shley-tree-1.png')&quot; title=&quot;shley-tree-1.png&quot;&gt;&lt;/div&gt; 
&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/subtle-grey.png')&quot; title=&quot;subtle-grey.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/xv.png')&quot; title=&quot;xv.png&quot;&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;pattern&quot; style=&quot;background-image:url('/assets/css/pics/background/triangles.png')&quot; title=&quot;triangles.png&quot;&gt;&lt;/div&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;script&gt;
  $('.pattern').click(function(){
    var source = this.style.backgroundImage;
    document.getElementsByTagName('body')[0].style.backgroundImage = source;
    console.log(&quot;url('&quot; + source + &quot;'))&quot;);
  })
&lt;/script&gt;

&lt;p&gt;Чтобы изменить фоновое изображение, укажите имя файла новой картинки в переменной &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;background-pattern&lt;/code&gt; файла &lt;strong&gt;theme.scss&lt;/strong&gt;.
Чтобы использовать другую картинку в качестве фона, загрузите ее с сайта
&lt;a href=&quot;https://www.transparenttextures.com/&quot;&gt;transparenttextures.com&lt;/a&gt; и положите в каталог 
 &lt;strong&gt;assets/css/pics/background&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote class=&quot;filename&quot;&gt;
  &lt;p&gt;theme.scss&lt;/p&gt;
&lt;/blockquote&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scss&quot; data-lang=&quot;scss&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// use this or pick any from /css/pics/background folder or from transparenttextures.com&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$background-pattern&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'random-grey-variations.png'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
        <pubDate>Fri, 03 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://vsuh.github.io/2020/01/03/theme-tuning.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/2020/01/03/theme-tuning.html</guid>
        
        <category>настройка</category>
        
        <category>jekyll</category>
        
        
      </item>
    
      <item>
        <title>Parsing JSON with Ruby</title>
        <description>&lt;p&gt;Parsing JSON with Ruby is actually extremely easy. All you have to do is have the json gem installed (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gem install json&lt;/code&gt;) and call the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JSON.parse&lt;/code&gt; method on the JSON data to convert it to ruby hashes. If you look at this small program here, you can see how I have implemented parsing JSON in Ruby.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;c1&quot;&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'json'&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'net/http'&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'libnotify'&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parsejson&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;http://api.openweathermap.org/data/2.5/find?q=London&amp;amp;mode=json&quot;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Net&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;get_response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;URI&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;weatherjson&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;body&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;actual&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weatherjson&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# check for errors&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;actual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;has_key?&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Error'&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;error with the url&quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;actual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;list&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;listitem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;weather&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listitem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;weather&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;weather&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weath&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listitem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;temp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;273.15&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;%.2f&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
        <pubDate>Sun, 22 Dec 2013 17:18:23 +0000</pubDate>
        <link>https://vsuh.github.io/ruby/2013/12/22/ruby-json.html</link>
        <guid isPermaLink="true">https://vsuh.github.io/ruby/2013/12/22/ruby-json.html</guid>
        
        
        <category>ruby</category>
        
      </item>
    
  </channel>
</rss>
