<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[pgood dev notes]]></title><description><![CDATA[pgood dev notes]]></description><link>https://b.pgood.space</link><generator>RSS for Node</generator><lastBuildDate>Thu, 14 May 2026 23:06:55 GMT</lastBuildDate><atom:link href="https://b.pgood.space/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Install Apache NetBeans on Fedora 39 Using Snap]]></title><description><![CDATA[Install Java JD
NetBeans requires Java JDK 17 to be available on the system. So, you can install either OpenJDK or Oracle Java for Apache NetBeans installation.
sudo dnf install java-17-openjdk-devel -y

Once the OpenJDK installation is complete, che...]]></description><link>https://b.pgood.space/install-apache-netbeans-on-fedora-39-using-snap</link><guid isPermaLink="true">https://b.pgood.space/install-apache-netbeans-on-fedora-39-using-snap</guid><category><![CDATA[netbeans]]></category><category><![CDATA[Fedora]]></category><category><![CDATA[snap]]></category><category><![CDATA[IDEs]]></category><dc:creator><![CDATA[Pavel Khoroshkov]]></dc:creator><pubDate>Mon, 25 Mar 2024 07:38:08 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-install-java-jd">Install Java JD</h2>
<p>NetBeans requires Java JDK 17 to be available on the system. So, you can install either OpenJDK or Oracle Java for Apache NetBeans installation.</p>
<pre><code class="lang-bash">sudo dnf install java-17-openjdk-devel -y
</code></pre>
<p>Once the OpenJDK installation is complete, check the Java version with the below command.</p>
<pre><code class="lang-bash">java -version
</code></pre>
<p><strong>Output:</strong></p>
<pre><code class="lang-bash">openjdk version <span class="hljs-string">"17.0.9"</span> 2023-10-17
OpenJDK Runtime Environment (Red_Hat-17.0.9.0.9-4) (build 17.0.9+9)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.9.0.9-4) (build 17.0.9+9, mixed mode, sharing)
</code></pre>
<h2 id="heading-install-apache-netbeans">Install Apache NetBeans</h2>
<p>First, install the Snap package management on your system.</p>
<pre><code class="lang-bash">sudo dnf install -y snapd
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install core &amp;&amp; sudo snap refresh core
</code></pre>
<p>Then, install Apache NetBeans using the <code>snap</code> command.</p>
<pre><code class="lang-bash">sudo snap install netbeans --classic
</code></pre>
<p>The installation will take some time to complete. After installing NetBeans, verify the NetBeans installation using the below command.</p>
<pre><code class="lang-bash">sudo snap list netbeans
</code></pre>
<p><strong>Output:</strong></p>
<pre><code class="lang-bash">Name      Version  Rev  Tracking       Publisher         Notes
netbeans  21       93   latest/stable  apache-netbeans✓  classic
</code></pre>
<p>That's it!</p>
]]></content:encoded></item><item><title><![CDATA[Laravel Mix + HMR]]></title><description><![CDATA[Если вы вдруг захотите, чтобы режим npm run hot, который по идее должен задействовать Hot Module Replacement, у вас все таки заработал, то вам придется вставить в webpack.mix.js следующий код:
mix.webpackConfig({
    devServer: {
        proxy: {
   ...]]></description><link>https://b.pgood.space/laravel-mix-hmr</link><guid isPermaLink="true">https://b.pgood.space/laravel-mix-hmr</guid><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Pavel Khoroshkov]]></dc:creator><pubDate>Mon, 04 Apr 2022 19:05:56 GMT</pubDate><content:encoded><![CDATA[<p>Если вы вдруг захотите, чтобы режим <strong><code>npm run hot</code></strong>, который по идее должен задействовать Hot Module Replacement, у вас все таки заработал, то вам придется вставить в <code>webpack.mix.js</code> следующий код:</p>
<pre><code><span class="hljs-selector-tag">mix</span><span class="hljs-selector-class">.webpackConfig</span>({
    <span class="hljs-attribute">devServer</span>: {
        proxy: {
            <span class="hljs-string">'*'</span>: <span class="hljs-string">'http://localhost:8000'</span>
        }
    }
});
</code></pre><p>Запустите веб-сервер</p>
<pre><code>$ php artisan serve
</code></pre><p>а затем</p>
<pre><code>$ <span class="hljs-built_in">npm</span> run hot
</code></pre><p>После этого внесенные во фронт-энд исходники изменения будут динамически отображаться на странице, без полной ее перезагрузки.</p>
<p><em>Взято отсюда https://github.com/laravel-mix/laravel-mix/issues/2057</em></p>
]]></content:encoded></item><item><title><![CDATA[Справочник товарной номенклатуры внешнеэкономической деятельности (ТН ВЭД) в XML]]></title><description><![CDATA[Справочник товарной номенклатуры внешнеэкономической деятельности (ТН ВЭД) доступен через СМЭВ, но что, если к СМЭВ нет доступа? В этом случае получить справочник в приемлемом машиночитаемом виде оказалось проблемой, единственный официальный источник...]]></description><link>https://b.pgood.space/spravochnik-tovarnoj-nomenklatury-vneshneekonomicheskoj-deyatelnosti-tn-ved-v-xml</link><guid isPermaLink="true">https://b.pgood.space/spravochnik-tovarnoj-nomenklatury-vneshneekonomicheskoj-deyatelnosti-tn-ved-v-xml</guid><category><![CDATA[xml]]></category><dc:creator><![CDATA[Pavel Khoroshkov]]></dc:creator><pubDate>Fri, 01 Apr 2022 06:50:45 GMT</pubDate><content:encoded><![CDATA[<p>Справочник товарной номенклатуры внешнеэкономической деятельности (ТН ВЭД) доступен через <a target="_blank" href="https://smev3.gosuslugi.ru/portal/inquirytype_one.jsp?id=40676&amp;zone=fed&amp;page=1&amp;dTest=false">СМЭВ</a>, но что, если к СМЭВ нет доступа? В этом случае получить справочник в приемлемом машиночитаемом виде оказалось проблемой, единственный официальный источник, который я обнаружил был ресурс <a target="_blank" href="https://www.nalog.gov.ru/rn77/program/5961290/">www.nalog.gov.ru</a>, но на момент, когда я скачал архив, данные в нем оказались, мягко говоря, не полными.</p>
<p>В итоге, я обратился к исходному документу на сайте Консультант <a target="_blank" href="http://www.consultant.ru/document/cons_doc_LAW_401174/">http://www.consultant.ru/document/cons_doc_LAW_401174/</a>, скачал его в формате RTF и распарсил данные справочника ТНВЭД в XML, результат получился <a target="_blank" href="https://pgood.space/userfiles/file/tnved-parser/">такой</a>.</p>
<p>Скачать парсер можно на <a target="_blank" href="https://github.com/pgooood/tnved-parser">GitHub</a></p>
]]></content:encoded></item><item><title><![CDATA[Как создать цепочку сертификатов?]]></title><description><![CDATA[Установка сертификатов не всегда простая задача. Обычно проблемы возникают, когда у вас один или более объединенных в цепь промежуточных сертификатов.
Одна из часто возникающих проблем - это установленная на сервер неполная цепочка сертификатов, что ...]]></description><link>https://b.pgood.space/kak-sozdat-cepochku-sertifikatov</link><guid isPermaLink="true">https://b.pgood.space/kak-sozdat-cepochku-sertifikatov</guid><category><![CDATA[https]]></category><category><![CDATA[nginx]]></category><category><![CDATA[SSL]]></category><category><![CDATA[server]]></category><dc:creator><![CDATA[Pavel Khoroshkov]]></dc:creator><pubDate>Thu, 24 Feb 2022 11:41:50 GMT</pubDate><content:encoded><![CDATA[<p>Установка сертификатов не всегда простая задача. Обычно проблемы возникают, когда у вас один или более объединенных в цепь промежуточных сертификатов.</p>
<p>Одна из часто возникающих проблем - это установленная на сервер неполная цепочка сертификатов, что приводит к ошибке:</p>
<blockquote>
<p>x509: certificate signed by unknown authority or server certificate verification failed</p>
</blockquote>
<p>При этом браузер, при обращении к сайту по HTTPS протоколу, может не показывать ошибку, т.к. браузеры умеют автоматически дополнять цепочку сертификатов (из своего встроенного хранилища сертификатов или из хранилища операционной системы).</p>
<h3 id="heading-delaem-pravilnuyu-cepochku-sertifikatov">Делаем правильную цепочку сертификатов</h3>
<p>Если у вас есть промежуточные сертификаты, то нужно убедится, что при ответе на запрос браузера или другого http-клиента, сервер, отправляет полную цепочку сертификатов. <strong>Цепочка должна содержать сертификат домена и все промежуточные сертификаты, при этом сертификат домена должен идти первым, как на картинке:</strong>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1645699917253/CPJfQvwDw.png" alt="В файле цепочки, сертификата домена стоит на первом месте, а затем идет промежуточный сертификат" /></p>
<p>Сначала давайте убедимся что у нас есть все необходимые файлы:</p>
<ul>
<li><strong>корневой сертификат</strong> (CA certificate, обычно файл называется ca.pem или cacerts.pem)</li>
<li><strong>промежуточный сертификат</strong> (Intermediate certificate, его может не быть совсем или их может быть несколько)</li>
<li><strong>сам сертификат домена</strong></li>
</ul>
<p>Далее в примерах мы будем использовать следующие имена файлов:</p>
<ul>
<li><strong>корневой сертификат</strong>: <code>ca.pem</code></li>
<li><strong>промежуточный сертификат</strong>: <code>intermediate.pem</code></li>
<li><strong>сертификат домена</strong>: <code>cert.pem</code></li>
</ul>
<p>Теперь, когда у нас есть все необходимое, перейдем в папку с файлами и объединим сертификат домена и промежуточный сертификат в один файл следующей командой (не забудьте заменить имена файлов из примера на соответствующие имена ваших файлов):</p>
<pre><code>$ cat cert.pem intermediate.pem <span class="hljs-operator">&gt;</span> chain.pem
</code></pre><p>Проверить правильность порядка следования сертификатов в цепочке мы можем так, выполняем команду:</p>
<pre><code>$ openssl crl2pkcs7 <span class="hljs-operator">-</span>nocrl <span class="hljs-operator">-</span>certfile chain.pem <span class="hljs-operator">|</span> openssl pkcs7 <span class="hljs-operator">-</span>print_certs <span class="hljs-operator">-</span>noout
</code></pre><p>вывод будет примерно такой:</p>
<pre><code>subject<span class="hljs-operator">=</span><span class="hljs-operator">/</span>C<span class="hljs-operator">=</span>Countrycode<span class="hljs-operator">/</span>ST<span class="hljs-operator">=</span>State<span class="hljs-operator">/</span>O<span class="hljs-operator">=</span>Organization<span class="hljs-operator">/</span>CN<span class="hljs-operator">=</span>FQDN
issuer<span class="hljs-operator">=</span><span class="hljs-operator">/</span>C<span class="hljs-operator">=</span>Countrycode<span class="hljs-operator">/</span>ST<span class="hljs-operator">=</span>State<span class="hljs-operator">/</span>O<span class="hljs-operator">=</span>Organization<span class="hljs-operator">/</span>CN<span class="hljs-operator">=</span>the name of the intermediate CA

subject<span class="hljs-operator">=</span><span class="hljs-operator">/</span>C<span class="hljs-operator">=</span>Countrycode<span class="hljs-operator">/</span>ST<span class="hljs-operator">=</span>State<span class="hljs-operator">/</span>O<span class="hljs-operator">=</span>Organization<span class="hljs-operator">/</span>CN<span class="hljs-operator">=</span>the name of the intermediate CA
issuer<span class="hljs-operator">=</span><span class="hljs-operator">/</span>C<span class="hljs-operator">=</span>Countrycode<span class="hljs-operator">/</span>ST<span class="hljs-operator">=</span>State<span class="hljs-operator">/</span>O<span class="hljs-operator">=</span>Organization<span class="hljs-operator">/</span>CN<span class="hljs-operator">=</span>the name of the CA
</code></pre><p>в поле CN  мы должны увидеть:</p>
<ul>
<li>subject: домен, на который выдан сертификат</li>
<li>issuer: имя промежуточного сертификата</li>
<li>subject: имя промежуточного сертификата, которое <strong>должно совпадать со значение в поле <code>issuer</code> предидущего сертификата</strong></li>
<li>issuer: имя корневого сертификата</li>
</ul>
<p>Если описанные выше условия выполняются, то цепочка сертификатов сделана правильно!</p>
<p>Промежуточных сертификатов может быть больше одного, в этом случае в файл должны быть добавлены все промежуточные сертификаты, по тому же принципу:
<strong>поле <code>subject</code> каждого следующего сертификата должно соответствовать полю <code>issuer</code> предидущего сертификата</strong>. Получить поле <code>issuer</code> можно следующей командой:</p>
<pre><code>openssl x509 <span class="hljs-operator">-</span>in cert.pem <span class="hljs-operator">-</span>noout <span class="hljs-operator">-</span>issuer
</code></pre><p><em>Статья написана на основе материалов из поста <a target="_blank" href="https://medium.com/@superseb/get-your-certificate-chain-right-4b117a9c0fce">Get your certificate chain right</a></em></p>
]]></content:encoded></item><item><title><![CDATA[Как сделать авторизацию по ключу на удаленном сервере для Git на Windows?]]></title><description><![CDATA[Устанавливаем Git, если не установлен и запускаем Git Bash
Создаем ключssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# Enter file in which to save the key ({путь по умолчанию}):
# можно ничего не вводить останется путь по умолчанию, жмем Ente...]]></description><link>https://b.pgood.space/kak-sdelat-avtorizaciyu-po-klyuchu-na-udalennom-servere-dlya-git-na-windows</link><guid isPermaLink="true">https://b.pgood.space/kak-sdelat-avtorizaciyu-po-klyuchu-na-udalennom-servere-dlya-git-na-windows</guid><category><![CDATA[ssh]]></category><category><![CDATA[Git]]></category><dc:creator><![CDATA[Pavel Khoroshkov]]></dc:creator><pubDate>Thu, 30 Dec 2021 10:03:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1640860126984/8gJlGcMHe.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li>Устанавливаем <a target="_blank" href="https://git-scm.com/download/win">Git</a>, если не установлен и запускаем Git Bash</li>
<li>Создаем ключ<pre><code>ssh-keygen -t rsa -b <span class="hljs-number">4096</span> -C <span class="hljs-string">"your_email@example.com"</span>
<span class="hljs-comment"># Enter file in which to save the key ({путь по умолчанию}):</span>
<span class="hljs-comment"># можно ничего не вводить останется путь по умолчанию, жмем Enter</span>
<span class="hljs-comment"># Enter passphrase (empty for no passphrase):</span>
<span class="hljs-comment"># ничего не вводим, жмем Enter</span>
</code></pre>В зависимости от выбранного алгоритма шифрования (в нашем случае rsa) будет меняться имя файлов ключей, путь по умолчанию формируется например так:
закрытый ключ: <code>/c/Users/{username}/.ssh/id_{алгоритм}</code>
открытый ключ: <code>/c/Users/{username}/.ssh/id_{алгоритм}.pub</code>
но лучше использовать указатель на домашнюю папку пользователя: 
закрытый ключ: <code>~/.ssh/id_{алгоритм}</code>
открытый ключ: <code>~/.ssh/id_{алгоритм}.pub</code>
Конечно, вы можете задать собственное имя файлов, но это надо будет учитывать в дальнейших командах</li>
<li>Запускаем ssh-agent в фоне<pre><code><span class="hljs-built_in">eval</span> <span class="hljs-string">"<span class="hljs-subst">$(ssh-agent -s)</span>"</span>
</code></pre></li>
<li>Добавляем сгенерированный закрытый ключ в ssh-agent<pre><code>ssh<span class="hljs-operator">-</span>add <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.ssh/id_rsa
</code></pre></li>
<li>Копируем открытый ключ на сервер<pre><code>ssh<span class="hljs-operator">-</span>copy<span class="hljs-operator">-</span>id <span class="hljs-operator">-</span>p <span class="hljs-number">22</span> <span class="hljs-operator">-</span>i <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.ssh/id_rsa.pub username@host<span class="hljs-operator">-</span>name.ru
</code></pre>Замените <code>username</code> на имя пользователя, под которым вы подключаетесь по SSH к серверу, а <code>host-name.ru</code> на имя хоста сервера. Указание порта -p 22 можно опустить, если используется стандартный 22-й порт.
Готово, теперь гит будет успешно подключаться к вашему удаленному репозитарию, например в папке <code>/var/www</code>, по URL <code>ssh://host-name.ru/var/www</code>, без пароля.</li>
</ol>
]]></content:encoded></item></channel></rss>