<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Some stuff (Записи о misc)</title><link>https://psss.site/</link><description></description><atom:link href="https://psss.site/categories/misc.xml" rel="self" type="application/rss+xml"></atom:link><language>ru</language><copyright>Contents © 2026 &lt;a href="mailto:none@example.com"&gt;None&lt;/a&gt; 
&lt;br/&gt;
Все материалы доступны как &lt;a rel="license" href="http://creativecommons.org/publicdomain/zero/1.0/"&gt;
общественное достояние CC0 1.0 Universal (CC0 1.0) Public Domain Dedication&lt;/a&gt;.
</copyright><lastBuildDate>Sat, 10 Oct 2026 15:26:38 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Преобразовать svg в pdf</title><link>https://psss.site/posts/svg2pdf/</link><dc:creator>None</dc:creator><description>&lt;h2&gt;Преобразовать SVG в PDF&lt;/h2&gt;
&lt;p&gt;Преобразовать &lt;em&gt;svg&lt;/em&gt; файл в &lt;em&gt;pdf&lt;/em&gt; можно при помощи
программы &lt;code&gt;rsvg-convert&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Для установки её в Debian:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;apt install librsvg2-bin
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Для Windows всё немного сложнее, понадобится &lt;a href="https://github.com/msys2/msys2-installer/releases"&gt;MSYS&lt;/a&gt;.
В его терминале выполнить:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;pacman -S mingw-w64-ucrt-x86_64-librsvg
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Обрезать PDF&lt;/h2&gt;
&lt;h3&gt;Вариант 1. pdfcropmargins&lt;/h3&gt;
&lt;p&gt;Установить можно через &lt;code&gt;pip3&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;pip3 install pdfCropMargins --upgrade --only-binary pymupdf
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Вариант 2. pdfcrop&lt;/h3&gt;
&lt;p&gt;Для обрезки pdf-файлов можно использовать &lt;code&gt;pdfcrop&lt;/code&gt; из состава &lt;em&gt;TeXLive&lt;/em&gt;.
Под Windows надо установить &lt;em&gt;TeXLive&lt;/em&gt;, для Debian можно только часть (но зависимостей будет много):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;apt install texlive-extra-utils
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Скрипт для преобразования всех SVG файлов в каталоге&lt;/h2&gt;
&lt;h3&gt;При использовании &lt;code&gt;pdfcropmargins&lt;/code&gt;:&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;

rm&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;*.pdf
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;v&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;*.svg
&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$v&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;FNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;v&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;rsvg-convert&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;pdf&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FNAME&lt;/span&gt;&lt;span class="s2"&gt;.pdf"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$v&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;pdfcropmargins&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-p4&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-A&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FNAME&lt;/span&gt;&lt;span class="s2"&gt;.pdf"&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;При использовании &lt;code&gt;pdfcrop&lt;/code&gt;:&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;

rm&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;*.pdf
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;v&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;*.svg
&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$v&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;FNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;v&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;rsvg-convert&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;pdf&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FNAME&lt;/span&gt;&lt;span class="s2"&gt;.pdf"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$v&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;pdfcrop&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FNAME&lt;/span&gt;&lt;span class="s2"&gt;.pdf"&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Windows&lt;/h3&gt;
&lt;p&gt;bat-файл для Windows для преобразования одного файла:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; off

&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: FNAME=имя файла без расширения&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;FNAME&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%~n1&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;RSVG_PATH&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;C:\msys2\ucrt64\bin

&lt;span class="nv"&gt;%RSVG_PATH%&lt;/span&gt;\rsvg-convert.exe -f pdf -o &lt;span class="nv"&gt;%FNAME%&lt;/span&gt;.pdf &lt;span class="nv"&gt;%FNAME%&lt;/span&gt;.svg

pdfcropmargins -p 0 -p4 0 0 0 0 -A &lt;span class="nv"&gt;%FNAME%&lt;/span&gt;.pdf
&lt;/pre&gt;&lt;/div&gt;</description><category>linux</category><category>misc</category><guid>https://psss.site/posts/svg2pdf/</guid><pubDate>Sun, 12 Jul 2026 08:40:31 GMT</pubDate></item><item><title>HTML redirect</title><link>https://psss.site/posts/html-redirect/</link><dc:creator>None</dc:creator><description>&lt;p&gt;Перенаправить статически страницу
можно html-тегом &lt;code&gt;&amp;lt;meta...&lt;/code&gt; внутри &lt;code&gt;&amp;lt;head&amp;gt;...&amp;lt;/head&amp;gt;&lt;/code&gt;, можно 
при помощи &lt;em&gt;javascript&lt;/em&gt;. Лучше использовать и то и другое.
И на всякий случай ещё и явную ссылку, вдруг у кого-то браузер 
сам не перейдёт.&lt;/p&gt;
&lt;p&gt;Вот пример:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"en-US"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cm"&gt;&amp;lt;!-- html redirect with timeout=0 --&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"refresh"&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0; url=http://example.com"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cm"&gt;&amp;lt;!-- for search engines --&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"http://www.example.com"&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="cm"&gt;&amp;lt;!-- javascript redirect --&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://example.com"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Page Redirection&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cm"&gt;&amp;lt;!-- Note: don't tell people to `click` the link, &lt;/span&gt;
&lt;span class="cm"&gt;       just tell them that it is a link. --&amp;gt;&lt;/span&gt;
  If you are not redirected automatically, 
  follow this &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'http://example.com'&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;link to example&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;.
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>misc</category><guid>https://psss.site/posts/html-redirect/</guid><pubDate>Thu, 09 Oct 2025 12:20:33 GMT</pubDate></item><item><title>QEMU run</title><link>https://psss.site/posts/qemu-run/</link><dc:creator>None</dc:creator><description>&lt;p&gt;Скрипт для запуска qemu с типовыми ключами (и образом CD в качестве 
опционального параметра).&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c1"&gt;# Имя файла образа жесткого диска&lt;/span&gt;
&lt;span class="nv"&gt;IMG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./img/main_disk.img

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$OSTYPE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"linux-gnu"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;tmp
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;CMDLINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;qemu-system-x86_64
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-cpu qemu64 -enable-kvm -cpu host -hdb fat:rw:./tmp"&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;CMDLINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;qemu-system-x86_64
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-cpu qemu64"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-gt&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"external iso as cdrom &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CDROM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-cdrom&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-boot&lt;span class="w"&gt; &lt;/span&gt;d
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="nv"&gt;CDROM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="nv"&gt;$CMDLINE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-hda&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$IMG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;$CDROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$OPTS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8192&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-vga&lt;span class="w"&gt; &lt;/span&gt;cirrus&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-net&lt;span class="w"&gt; &lt;/span&gt;nic,model&lt;span class="o"&gt;=&lt;/span&gt;rtl8139&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-net&lt;span class="w"&gt; &lt;/span&gt;user&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-usbdevice&lt;span class="w"&gt; &lt;/span&gt;tablet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-vga&lt;span class="w"&gt; &lt;/span&gt;virtio
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Для начального создания образа диска можно использовать:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;qemu-img&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;qcow2&lt;span class="w"&gt; &lt;/span&gt;main_disk.img&lt;span class="w"&gt; &lt;/span&gt;20G
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Если надо упаковать каталог &lt;code&gt;tmp&lt;/code&gt; в iso-образ, например,
чтобы подсунуть в качестве cdrom при запуске &lt;code&gt;qemu&lt;/code&gt;, то сделать можно так:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;mkisofs&lt;span class="w"&gt; &lt;/span&gt;-R&lt;span class="w"&gt; &lt;/span&gt;-J&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;dat.iso&lt;span class="w"&gt; &lt;/span&gt;tmp/*
&lt;/pre&gt;&lt;/div&gt;</description><category>linux</category><category>misc</category><category>windows</category><guid>https://psss.site/posts/qemu-run/</guid><pubDate>Tue, 10 Jun 2025 12:52:29 GMT</pubDate></item><item><title>Boosty video download</title><link>https://psss.site/posts/boosty-video-download/</link><dc:creator>None</dc:creator><description>&lt;p&gt;Открыть страницу с видео, видеоплеер должен быть виден на странице.&lt;/p&gt;
&lt;p&gt;В консоли средств разработчика (F12) выполнить:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'vk-video-player'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;downloadVideo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>misc</category><guid>https://psss.site/posts/boosty-video-download/</guid><pubDate>Sat, 26 Oct 2024 14:33:14 GMT</pubDate></item><item><title>Telegraph ссылка авторизации</title><link>https://psss.site/posts/telegraph-ssylka-avtorizatsii/</link><dc:creator>None</dc:creator><description>&lt;h2&gt;Введение в суть проблемы&lt;/h2&gt;
&lt;p&gt;В сервисе публикаций &lt;a href="https://telegra.ph"&gt;telegraph&lt;/a&gt; в явном виде авторизации нет.
В неявном оно, конечно, есть (иначе было б невозможно
редактировать ранее написанное), но хранится исключительно
в cookies браузера. Грубо говоря, из другого места не получится
редактировать, да и с этого ровно до тех пор пока не
очистишь cookies.&lt;/p&gt;
&lt;p&gt;Конечно, всегда можно тупо скопировать картинки и текст
и создать новый пост в &lt;a href="https://telegra.ph"&gt;telegraph&lt;/a&gt;, но это 
как-то не то...&lt;/p&gt;
&lt;p&gt;Разработчики предлагают частично решить проблему 
при помощи telegram-бота @Telegraph. 
Бот @Telegraph позволяет авторизовываться в Telegraph через учётную запись Telegram.
Фактически он авторизует браузер, а так как telegram можно
запускать на разных устройствах, то можно авторизовать (через этого же бота)
браузеры на разных устройствах и это будет один и тот же аккаунт.&lt;/p&gt;
&lt;p&gt;Проблема решена! Но не совсем... Бывает нужно авторизовать браузер другого
(удаленного) человека. Или где-то нельзя (или не хочется) запускать 
telegram...&lt;/p&gt;
&lt;p&gt;Для этого случая предусмотрено формирование ссылки авторизации, которая
действует (суля по описанию) 5 минут, и по ней можно авторизовать браузер.
Сложности начинаются с того, как её сформировать. Бот почему-то не умеет
(зато закрывать лишние сеансы/сессии бот прекрасно умеет).&lt;/p&gt;
&lt;p&gt;А ещё у telegra.ph есть web-api и там авторизация ведётся по &lt;em&gt;access_token&lt;/em&gt;.
То есть, базовым элементом авторизации является &lt;em&gt;access_token&lt;/em&gt;, только явно
его не показывают.&lt;/p&gt;
&lt;p&gt;Пора сводить всё это вместе и решить уже проблему генерации ссылки.&lt;/p&gt;
&lt;h2&gt;Получение токена&lt;/h2&gt;
&lt;p&gt;Обычно все описания пишут, что надо создать аккаунт и тогда
API вернет токе  нового аккаунта. У нас же задача
подцепить уже существующий аккаунт.&lt;/p&gt;
&lt;p&gt;Для начала надо иметь авторизованный (лучше через бота) браузер.&lt;/p&gt;
&lt;p&gt;В браузере надо открыть средства разработчика, загрузить https://telegra.ph
и из Application/Cookies скопировать &lt;em&gt;tph_token&lt;/em&gt; (набор букв и цифр).&lt;/p&gt;
&lt;h2&gt;Получаем ссылку авторизации&lt;/h2&gt;
&lt;p&gt;Можно использовать &lt;code&gt;curl&lt;/code&gt;, можно использовать &lt;code&gt;python&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Использование curl&lt;/h3&gt;
&lt;p&gt;После этого можно (уже на любом устройстве, не обязательно авторизованном) 
сделать запрос ссылки для авторизации.
Под Windows так:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;curl &lt;span class="s2"&gt;"https://api.telegra.ph/getAccountInfo?fields=&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;5B&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;22auth_url&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;22&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;5D&amp;amp;access_token=&amp;lt;token&amp;gt;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Под bash так:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;curl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.telegra.ph/getAccountInfo?fields=%5B%22auth_url%22%5D&amp;amp;access_token=&amp;lt;token&amp;gt;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;где вместо &lt;code&gt;&amp;lt;token&amp;gt;&lt;/code&gt; следует вписать скопированный токен.&lt;/p&gt;
&lt;p&gt;Скрипт напечатает ссылку для авторизации, которую уже нужно ввести
в том, браузере, который надо авторизовать.&lt;/p&gt;
&lt;p&gt;Список постов можно посмотреть так:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;curl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.telegra.ph/getPageList?access_token=&amp;lt;token&amp;gt;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Вообще есть &lt;a href="https://telegra.ph/api"&gt;Описание telegra.ph API&lt;/a&gt; и там можно, например,
выводить статистику просмотров...&lt;/p&gt;
&lt;h3&gt;Использование python&lt;/h3&gt;
&lt;p&gt;Установить пакет &lt;code&gt;telegraph&lt;/code&gt; ( вот &lt;a href="https://github.com/python273/telegraph"&gt;описание&lt;/a&gt; ).&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;pip3&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;telegraph
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Создать простой скрипт для получения ссылки авторизации (&lt;em&gt;токен&lt;/em&gt; тоже понадобится).&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;telegraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Telegraph&lt;/span&gt;

&lt;span class="n"&gt;telegraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Telegraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;token&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;telegraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_account_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'auth_url'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>misc</category><category>python</category><guid>https://psss.site/posts/telegraph-ssylka-avtorizatsii/</guid><pubDate>Tue, 23 Jan 2024 20:07:32 GMT</pubDate></item><item><title>Far menu</title><link>https://psss.site/posts/far-menu/</link><dc:creator>None</dc:creator><description>&lt;h2&gt;Menu for Far manager&lt;/h2&gt;
&lt;p&gt;Файл &lt;code&gt;FarMenu.ini&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;Convert video&lt;/span&gt;
&lt;span class="na"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;video to mp3&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!"  -codec&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;a libmp3lame -qscale:a 0 "!.mp3"&lt;/span&gt;
&lt;span class="na"&gt;t&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;video for telegram mp3&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!" -c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;v libx264 -crf !?Quality:?16! -profile:v baseline -flags +global_header -movflags +faststart -codec:a libmp3lame -qscale:a 3 "!.1.mov"&lt;/span&gt;
&lt;span class="na"&gt;e&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;Video for telegram AAC&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!" -c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;v libx264 -crf !?Quality:?16! -profile:v baseline -flags +global_header -movflags +faststart -c:a aac -ac 2 -qscale:a 3 "!.1.mov"&lt;/span&gt;
&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;video for telegram no sound&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!" -c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;v libx264 -crf !?Quality:?16! -an "!.1.mov"&lt;/span&gt;
&lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;video to wav&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!" "!.wav"&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;video for web&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!" -c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;v libvpx -b:v 0 -crf 16 -codec:a libvorbis -ac 2 -b:a 160k "!.webm"&lt;/span&gt;
&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;video to avi&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;ffmpeg -i "!.!" -c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;v mpeg4 -vtag xvid -qscale:v 5 -c:a libmp3lame -qscale:a 5 "!.1.avi"&lt;/span&gt;
&lt;span class="na"&gt;}&lt;/span&gt;
&lt;span class="na"&gt;--&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;Git&lt;/span&gt;
&lt;span class="na"&gt;G&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;GitEx&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;gitex&lt;/span&gt;
&lt;span class="na"&gt;П&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;GitEx&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;gitex&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;gitk&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;gitk&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;git gui&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;git gui&lt;/span&gt;
&lt;span class="na"&gt;--&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;LibreOffice&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;soffice.exe "!\!.!"&lt;/span&gt;
&lt;span class="na"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;Diff dirs&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;"C&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;\Programs\KDiff3_64_bit\kdiff3.exe" "!^!\." "!&lt;/span&gt;&lt;span class="c1"&gt;#!\."&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;Meld dirs&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;"C&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;\Program Files\Meld\Meld.exe" !^!/ !&lt;/span&gt;&lt;span class="c1"&gt;#!/&lt;/span&gt;
&lt;span class="na"&gt;M&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;WinMerge&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;WinMergeU.exe "!^!\!.!" "!#!\!.!"&lt;/span&gt;
&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s"&gt;Meld files&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;"C&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;\Program Files\Meld\Meld.exe" "!^!\!.!" "!&lt;/span&gt;&lt;span class="c1"&gt;#!\!.!"&lt;/span&gt;
&lt;span class="na"&gt;E&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;View in Excel&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;excel.exe "!\!.!"&lt;/span&gt;
&lt;span class="na"&gt;S&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;Search in files&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;sif3&lt;/span&gt;
&lt;span class="na"&gt;W&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;View in Word&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;WINWORD.EXE "!\!.!"&lt;/span&gt;
&lt;span class="na"&gt;/&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;Mplayer&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;\opt\mpv\mpv "!\!.!"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>misc</category><guid>https://psss.site/posts/far-menu/</guid><pubDate>Thu, 26 Oct 2023 19:42:21 GMT</pubDate></item><item><title>Преобразование изображений в pdf</title><link>https://psss.site/posts/images-to-pdf/</link><dc:creator>None</dc:creator><description>&lt;h2&gt;img2pdf&lt;/h2&gt;
&lt;p&gt;Программа
&lt;a href="https://gitlab.mister-muffin.de/josch/img2pdf"&gt;https://gitlab.mister-muffin.de/josch/img2pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Описание: &lt;a href="https://pypi.org/project/img2pdf/"&gt;https://pypi.org/project/img2pdf/&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Установка&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;pip3&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;img2pdf
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Преобразование&lt;/h3&gt;
&lt;p&gt;Преобразовать все jpg-файлы в текущем каталоге в файл &lt;code&gt;1.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;img2pdf&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.pdf&lt;span class="w"&gt; &lt;/span&gt;*.jpg
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Графическая оболочка&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;img2pdf-gui
&lt;/pre&gt;&lt;/div&gt;</description><category>misc</category><category>pdf</category><guid>https://psss.site/posts/images-to-pdf/</guid><pubDate>Tue, 24 Oct 2023 16:09:04 GMT</pubDate></item><item><title>Сервисы для рисования</title><link>https://psss.site/posts/services-for-drawing/</link><dc:creator>None</dc:creator><description>&lt;h2&gt;Немного сервисов для рисования&lt;/h2&gt;
&lt;h3&gt;Графики и текст&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.idroo.com/"&gt;Idroo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://o-whiteboard.com/"&gt;o-whiteboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://edu.google.com/intl/ALL_us/jamboard/"&gt;Google Jamboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Рисунки&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://loneti.ru/draw"&gt;loneti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://noopdie.com/roundraw/draw.html?v=2"&gt;noopdie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Программы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mypaint.org/"&gt;Mypaint&lt;/a&gt; (win + linux) - под linux намного лучше и стабильней, чем под windows&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gimp.org"&gt;Gimp&lt;/a&gt; (win + linux)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.artweaver.de/en"&gt;Artweaver&lt;/a&gt; (win)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.getpaint.net/index.html"&gt;Paint.net&lt;/a&gt; (win) - не получилось настроить учет силы нажатия&lt;/li&gt;
&lt;/ul&gt;</description><category>misc</category><guid>https://psss.site/posts/services-for-drawing/</guid><pubDate>Sun, 23 Oct 2022 14:51:06 GMT</pubDate></item><item><title>Объединение pdf файлов в один</title><link>https://psss.site/posts/pdf-files-merge/</link><dc:creator>None</dc:creator><description>&lt;h3&gt;GUI&lt;/h3&gt;
&lt;p&gt;Под Windows можно использовать бесплатную программу
&lt;a href="http://www.pdfill.com/pdf_tools_free.html"&gt;PDFill FREE PDF Tools&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Программа могучая, универсальная, может многое - не только объединять файлы в один.&lt;/p&gt;
&lt;h3&gt;CLI&lt;/h3&gt;
&lt;p&gt;Для использование командной строки можно использовать &lt;em&gt;Ghostscript&lt;/em&gt;.
Скачать можно &lt;a href="https://www.ghostscript.com/download/gsdnld.html"&gt;на официальном сайте&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Для Linux можно установить при помощи штатного пакетного менеджера.&lt;/p&gt;
&lt;p&gt;Для объединения файлов можно использовать:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;gs&lt;span class="w"&gt; &lt;/span&gt;-q&lt;span class="w"&gt; &lt;/span&gt;-sPAPERSIZE&lt;span class="o"&gt;=&lt;/span&gt;letter&lt;span class="w"&gt; &lt;/span&gt;-dNOPAUSE&lt;span class="w"&gt; &lt;/span&gt;-dBATCH&lt;span class="w"&gt; &lt;/span&gt;-sDEVICE&lt;span class="o"&gt;=&lt;/span&gt;pdfwrite&lt;span class="w"&gt; &lt;/span&gt;-sOutputFile&lt;span class="o"&gt;=&lt;/span&gt;output.pdf&lt;span class="w"&gt; &lt;/span&gt;file1.pdf&lt;span class="w"&gt; &lt;/span&gt;file2.pdf&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;fileN.pdf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Для Windows всё аналогично, только в качестве исполняемого файла следует использовать &lt;code&gt;gswin64c.exe&lt;/code&gt; или &lt;code&gt;gswin32c.exe&lt;/code&gt;
в зависимости от разрядности установленного &lt;em&gt;Ghostscript&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Обычно он устанавливается в &lt;em&gt;Program files&lt;/em&gt; и надо либо прописать путь в системной &lt;em&gt;PATH&lt;/em&gt; либо
писать полный путь каждый раз (не забывая при этом кавычек).&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="s2"&gt;"C:\Program Files\gs\gs9.19\bin\gswin64c.exe"&lt;/span&gt; -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf [...] fileN.pdf
&lt;/pre&gt;&lt;/div&gt;</description><category>misc</category><category>pdf</category><guid>https://psss.site/posts/pdf-files-merge/</guid><pubDate>Sun, 24 Jan 2021 13:26:31 GMT</pubDate></item><item><title>Chromium proxy</title><link>https://psss.site/posts/chromium-proxy/</link><dc:creator>None</dc:creator><description>&lt;h3&gt;Запуск Chromium через заданный прокси&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;

chromium&lt;span class="w"&gt; &lt;/span&gt;--proxy-server&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"socks5://127.0.0.1:8080"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Запуск Chromium через автоматическую настройку прокси&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;

chromium&lt;span class="w"&gt; &lt;/span&gt;--profile-directory&lt;span class="o"&gt;=&lt;/span&gt;Default&lt;span class="w"&gt; &lt;/span&gt;--proxy-pac-url&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;wpad url&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Запуск Chromium через sock5-прокси, созданный через ssh&lt;/h3&gt;
&lt;p&gt;Запуск ssh на нужный сервер с прокси на порту 1080, без интерактивной консоли.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;ssh&lt;span class="w"&gt; &lt;/span&gt;-2TnN&lt;span class="w"&gt; &lt;/span&gt;-D&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;user@domain.com
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;ssh&lt;/code&gt; умеет ещё и сжимать трафик, подавлять сообщения (ключи &lt;code&gt;-C -q&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Оставляем сеанс &lt;code&gt;ssh&lt;/code&gt; запущенным.&lt;/p&gt;
&lt;p&gt;Запуск chrome (может не сработать, смотря какая версия). &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;chrome&lt;span class="w"&gt; &lt;/span&gt;--proxy-server&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"socks5://127.0.0.1:1080"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--host-resolver-rules&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"MAP * ~NOTFOUND , EXCLUDE 127.0.0.1"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Другой вариант запуска chrome с новым профилем (каталог профиля может быть 
другим, естественно):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;chrome&lt;span class="w"&gt; &lt;/span&gt;--proxy-server&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"socks5://127.0.0.1:1080"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"~/.config/chromeproxy-profile"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Для проверки внутри chrome в адресную строку пишем (&lt;em&gt;НЕ РАБОТАЕТ - показывает пустой экран&lt;/em&gt;):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;chrome://net-internals/#proxy
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Страница с перечнем служебных страниц:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;chrome://about
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Там есть интересные штуки, например, список usb-устройств )):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;chrome://usb-internals
&lt;/pre&gt;&lt;/div&gt;</description><category>linux</category><category>misc</category><guid>https://psss.site/posts/chromium-proxy/</guid><pubDate>Fri, 08 Jan 2021 10:11:43 GMT</pubDate></item></channel></rss>